public static StateCollection GetByName(String partialName)
{
 StateCollection returnValue;
 returnValue = new StateCollection();
  //baseList is some list I wasn't nice enough to show where it came from.
  //It's just a list of states.  Get over it.
 var stateList = from state in baseList
                 where state.Name.StartsWith(partialName)
                 select new State(state.Name, state.Code);
 stateList.ToList().ForEach(currentState => returnValue.Add(currentState));
 return returnValue;
}
So what is done here:
Basically I am using a linq expression to get states from a list of states (Like Michigan, Illinois, or Canada) based on name.  No big deal.  Then I take the query and produce a List from it.  AMAZIN!
stateList.ToList().ForEach(curretState => returnValue.Add(curretState));
ForEach is an extension method for List<>.  Now if you remember from previous posts, that means it resides in a static class somewhere that "tacks" it on to the List<> class.  Basically this method acts like a typical foreach loop.  (You know, go through the list and do something. Or nothing.  I suppose you could just loop through if you wanted to.  I won't tell you how to live your life.)  Simple but in my opinion, much cleaner looking.
I mean I could do this:
public static StateCollection GetByName(String partialName)
{
 StateCollection returnValue;
 returnValue = new StateCollection();
 foreach(State currentState in baseList)
 {
   if(currentState.Name.StartsWith(partialName)
   {
     returnValue.Add(currentState);
   }
 }
 return returnValue;
}
Really it's just up to what you prefer.  (And I'm sure you could drive a car with no power brakes.  You'll still get there.)  Also, I really didn't need the linq expression since I could have done this all with ForEach (Provided baseList is IEnumerable).
One last note, all IEnumerable collections have the ToList() method (And a bunch of other ones for that matter.)
 
No comments:
Post a Comment