yield return

迭代: 迭代属性又称迭代器 c#入门经典

IEnumerable 接口负责 使用foreach 循环,重写foreach 循环的方式,或者提供一个定制的实现,并不一定很简单,深入了解foreach循环

(1)调用collectionObject.GetEnumerator(),返回IEnumerator应用,这个方法可以通过IEnumerable接口的实现代码来获得,但这是可选的。

(2)调用所返回的IEnumerator接口的MoveNext()方法。

(3)如果MoveNext()方法返回true,就是用IEnumerator接口的Current属性获取对象的一个引用,用foreach循环。

(4)重复前面两部,知道MoveNext()方法返回false为止,此时循环结束。

 IEnumerable与IEnumerator

(1)如果要迭代一个类,可使用GetEnumerator(),其返回类型是IEnumerator。

(2)如果要迭代一个类成员,例如一个方法,则使用IEnumerable

在迭代中使用yield 关键字,如yield return value 下面一个简单的例子;

public static IEnumerable SimpleList

{  

   yield return "string 1";  

     yield return "string 2";  

     yield return "string 3";

}

static void Main(){

   foreach(string item in SimpleList())//注意是方法   

   Console.WriteLine(item);  Console.ReadKey();

  }

一个遍历一定范围素数的方法 (例子)

1,首先创建一个 类,包含迭代的 IEnumerator GetEnumerator(),接口方法

2,调用,其中  Primer 构造函数 注意默认函数

static void Main() {  

  Primes prime2To1000=new Primes(2,1000);  

  foreach(long item in prime2To1000())   

  Console.Write("{0}  ",item)

  }   

 public class Primes        

{            

   private long min;            

  private long max;            

  public Primes() : this(2, 200)

      {

      }            

   public Primes(long minimum, long maximum)            

   {                

      if (min < 2)

                     min = 2;

                 else

                     min = minimum;

                max = maximum;

       }            

  public IEnumerator GetEnumerator()

      {

                 for (long possiblePrime = min; possiblePrime <= max; possiblePrime++)

                 {

                     bool isPrime = true;

                     for (long possibleFactor = 2; possibleFactor <= (long)Math.Floor(Math.Sqrt(possiblePrime)); possibleFactor++)

         {

                           long remainderSfterDivision = possiblePrime % possibleFactor;

                           if (remainderSfterDivision == 0)

                        {

                                 isPrime = false;

                               break;

                        }

                    }  

                   if (isPrime)

                        yield return possiblePrime;

                 }

            }

        }

二,迭代器和集合 迭代用于存储在字典集合中对象 无需处理DictionaryItem对象  下面是结合类Animals:

 public class Animals:DictionaryBase {

}

原文地址:https://www.cnblogs.com/lovey/p/2256345.html