真会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 对象。

posted @ 2018-09-25 08:38  唔愛吃蘋果  阅读(369)  评论(0编辑  收藏  举报