I created a BO that returned an IEnumerable<List<MyBO>>, but it didn't use any yield statements, it just called a data access layer that was using the yield statements.  I was concerned if this was going to work, so I decided to test it using    snippet compiler.
So this is my quick and dirty test to see if it would work:
public static void RunSnippet()
{
   foreach (List<string> answers in GetAnswers())
   {
       WL(answers.Count);
       foreach (string answer in answers)
       {
           WL(answer);
       }
   }
}
public static IEnumerable<List<string>> GetAnswers()
{
   return GetTheAnswers();
}
private static IEnumerable<List<string>> GetTheAnswers()
{
   List<string> answers = new List<string>();
   answers.Add("A");
   answers.Add("B");
   answers.Add("C");
   answers.Add("D");
   yield return answers;
   answers = new List<string>();
   answers.Add("D");
   answers.Add("C");
   answers.Add("B");
   answers.Add("A");
   yield return answers;
   answers = new List<string>();
   answers.Add("X");
   answers.Add("Y");
   answers.Add("Z");
   yield return answers;
}
And these were the results:
4
A
B
C
D
4
D
C
B
A
3
X
Y
Z
So even though GetAnswers() gets called once, GetTheAnswers() will return control back to the enumerating foreach multiple times.
 
 
 
 Posts
Posts
 
 

No comments:
Post a Comment