实现泛型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接口了。