IEnumerable接口和迭代器

一、概述

1.迭代器是可以返回相同类型的值的有序序列的一组代码片段。

2.迭代器可以用作方法,get 访问器

3.使用yield return 返回每个值,yield break 可以中止迭代

4.可以在一个类中使用多个迭代。

 

二、构建自己的迭代器

 

如何构建自己的迭代器呢。

1、最常用的方法是实现IEnumerable接口的GetEnumerator() 方法。

 

如下:

 

此类必须继承接口IEnumerable.即:public class TRJEnumerable:IEnumerable

这样,就实现了自己的一个迭代器,可以在别的地方应用了.

    TRJEnumerable trjEnumerable = new TRJEnumerable();

            foreach (string s in trjEnumerable)
            {
                Console.WriteLine(s);
            }

2、可以不继承接口IEnumerbale,但在类的内部要实现一个返回IEnumerable类型的方法。

如下:

public class TRJIEnumerbaleDemon1
   {
       public IEnumerable SampleIterator()
       {
           yield return "耶稣:1";
           yield return "耶稣:2";
           yield return "耶稣:3";
           yield break;
           yield return "耶稣:4";
       }
   }

调用的时候:

 TRJIEnumerbaleDemon1 trjiEnumerbaleDemon1 = new TRJIEnumerbaleDemon1();

            foreach (string value in trjiEnumerbaleDemon1.SampleIterator())
            {
                Console.WriteLine(value);
            }

 

当然,这个自定义方法可以带有参数。比如:想对同一数据源执行2种不同的访问形式,可以提供一个按升序返回元素的迭代器,而提供按降序返回元素的另一个迭代器。


       /// <summary>
       /// 升序迭代
       /// </summary>
       /// <param name="start"></param>
       /// <param name="end"></param>
       /// <returns></returns>
       public IEnumerable ASCIterator(int start,int end)
       {
           if (start<=end)
           {
               for(int i=start;i<=end;i++)
               {
                   yield return "对应的耶稣是:" + i;
               }
           }
       }

这样可以随心所欲的控制返回的值.

 

3、应用

最近在做一个小工具,数据源是一些类型,比如:int ,long,string,byte,zcInt,zcBool等。

可以把这样类型配置在一个xml中,然后程序启动的时候读取。自定义自己的类型迭代器,返回自己的类型值。

4、对接口IEnumerable和IEnumerator的区别不是怎么了解,但大致看了一下:

IEnumerable 接口只有方法GetIEnumerator()这个方法。

IEnumerator接口有一个属性,2个方法:MoveNext(),Reset(),Current。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值