迭代器,IEnumerator和IEnumerable的关系


 先声明本文只是代表我个人的想法,对不对望大家指点。

迭代器,IEnumerator和IEnumerable的目的就是实现我们自定义类可以实现类似list等CollectionBase类的foreach遍历。

IEnumerator和IEnumerable的关系:

     迭代器返回就是IEnumerable或者是IEnumerator,这边提一下Ienumberable就是要实现GetEnumberator,而GetEnumberator就是返回Ienumberator。

IEnumerator是一个包含3个要实现的接口(Current,MoveNext,ReSet),总归我们要实现foreach遍历就必须实现Ienumerator

实现Ieunmerable也是实现Ienumerator……这点必须清楚。

现在在说说迭代器和Ieunmerable的区别:

    上面的IEnumerator,Ieunmerable都是系统自动返回我们提供的类中的枚举数,譬如我们提供一个类:

class Animal
{
    public string Name { get; set; }
    public int Year { get; set; }
}
Animal a = new Animal{
            new Animal("Tom", 20));
            new Animal("jack", 22));
            new Animal("Jun", 29));
}

假如类实现了IEnumberator,遍历会自动的是 ("Tom", 20),("jack", 22),("jack", 22)。

但是我们要是用迭代器,我们可以自己添加要返回的东西,用yield return 来返回。

class Program
    {
        static void Main(string[] args)
        {
            //foreach里面in 后面必须实现  ienumerable
            foreach (string s in Diedaiqi.Simp(new List
   
   
    
     { "222", "333", "4444" }))
            {
                Console.WriteLine(s);
            }
        }
        public class Diedaiqi
        {
            //simp是迭代器  必须是静态  返回必须是 Ienumeralbe 或者 Ienumerator
            public static IEnumerable Simp(List
    
    
     
      str)
            {
                yield return "zhang";//这就是我们自己想返回的
                yield return "wang";//这就是我们自己想返回的
                foreach (string s in str)
                    yield return s;//这就是我们自己想返回的,但是是传过来的枚举数
                yield return "End";//这就是我们自己想返回的
             }
       }
}
/*输出结果是
zhang
wang
222
333
444
End
*/

    
    
   
   

总结:迭代器就是可以对对象添加我们自己想要返回的枚举数和类中枚举数,Ienumerable就是返回类中自带的枚举数。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值