zoukankan      html  css  js  c++  java
  • 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 {

    }

  • 相关阅读:
    lua源码分析 伪索引
    visual studio 插件
    修改Linux内核参数 减少TIME-WAIT
    linux下编译libmysqlclient, 安装mysql-server mysql-client
    编译静态库tinyxml2
    linux下编译lua库
    在Xshell中文件内容显示乱码
    Java中的自增自减
    Integer的缓存机制
    八大基本排序
  • 原文地址:https://www.cnblogs.com/lovey/p/2256345.html
Copyright © 2011-2022 走看看