实现泛型IEnumerable接口

用C#实现一个类的IEnumerable接口时有两种方法:1)实现非泛型IEnumerable接口;2)实现泛型IEnumerable(T)接口。如果采用方法1,当集合元素T是值类型时,将涉及到巨多的boxing和unboxing操作。因此,理所当然地采用方法2;

例如,以下代码采用方法2实现枚举从指定偏移开始所有整数

using System.Collections.Generic;
class Ints : IEnumerable<int> 
{ private readonly int offset; public Ints(int o) { offset = o; } public IEnumerator<int> GetEnumerator()
 { int i = offset; while( true ) yield return i++; } }

编译时产生如下错误:

error CS0535: 'Ints' does not implement interface member 'System.Collections.IEnumerable.GetEnumerator()'

而我们想要实现的是泛型的IEnumerable而不是非泛型的IEnumerable接口!怎么办呢?

查阅MSDN在线文档可知:泛型IEnumerable继承自非泛型IEnumerable。所有,在上述代码中加入:
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
  return GetEnumerator();
}
这样,非泛型方法转而调用泛型方法,从而不需要再去实现非泛型的IEnumerable接口了。

posted @ 2013-07-25 17:08  protorock  阅读(1560)  评论(0编辑  收藏  举报