实现泛型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接口了。
相关文章
相关标签/搜索