實現泛型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接口了。
相關文章
相關標籤/搜索