可枚举类型(IEnumerable和IEnumerator)

一、除数组以外,任何支持GetEnumerator()方法的类型都可以通过foreach结构进行运算。

public class person:IEnumerable
{
      private car[] carArr=new car[2];

      public person()
     {
           car[0]=new car('baoma',200,0);
           car[1]=new car('baoma',200,0);
     }
       
      public  IEnumerator GetEnumerator()
      {
             return carArr.GetEnumerator();
      }
}

如果在对象级隐藏IEnumerable的功能,使用显示接口实现

      public  IEnumerator IEnumerable.GetEnumerator()
      {
             return carArr.GetEnumerator();
      }

二、用yield关键字构建迭代器方法

不需要实现IEnumerable接口,但迭代器方法仍命名为GetEnumerator(),返回值仍为IEnumerator类型

public class person
{
      private car[] carArr=new car[2];

      public person()
     {
           car[0]=new car('baoma',200,0);
           car[1]=new car('baoma',200,0);
     }
       
      public  IEnumerator GetEnumerator()
      {
             foreach (car c in carArr)
             {
                   yield return c;
             }
      }
}

三、构建命名迭代器

yield关键字可以结合任何方法一起使用,无论方法名是什么

public IEnumerable GetTheCars()
{
      foreach(Car c in carArr)
      {
           yield return c;
      }
}

调用yield+方法。

foreach(Car c in carObj.GetTheCars() ) 
{
       //使用c
}

 

posted on 2017-03-19 22:19  儿时精神  阅读(270)  评论(0)    收藏  举报

导航