真会C#? -- Enumerator, Enumerable

Enumerator 迭代器,它是一个作用于一系列值的只读的只能向前的游标。enumerator对象需要实现下列接口中的一个:

  • System.Collections.IEnumerator

  • System.Collections.Generic.IEnumerator<T>

 

foreach语句会迭代一个Enumerable对象,enumerable对象是一个序列的逻辑表述。它本身不是游标,但是它产生游标。如果一个对象是enumerable对象,那么需要满足下列条件的一个:

  • 实现了IEnumerable和IEnumerable<T>接口

  • 有一个GetEnumerator方法,它返回一个enumerator 迭代器。

 

下面看两个迭代的例子。第一个是相对高级的方式,使用foreach:

 foreach (char c in "Hello World")
 {
      Console.WriteLine(c);
 }

  

 

而相对低级的方式,就是不使用foreach:

 using (var enumerator = "Hello World".GetEnumerator())
 {
         while (enumerator.MoveNext())
         {
               var element=enumerator.Current;
               Console.WriteLine(element);
         }
  }

  

 

 

注意:如果enumerator实现了IDisposable接口,那么foreach语句也会像using一样,在结束的时候隐式的dispose掉enumerator 对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值