2014-01-09 32 views
0

在研究有關IEnumeratorIEnumerator<T>,我就翻過了如下聲明: -爲什麼數組返回經典枚舉?

如果我們在任何收集調用的GetEnumerator(),我們主要得到了類型安全的版本,即「普通」版本,值得注意的例外這種情況是返回經典(非通用)版本的數組。

我的問題是: -
爲什麼陣列時調用GetEnumerator()函數返回「經典」枚舉,但像List<T>等其他數據結構返回通用枚舉?

string[] tempString = "Hello World!" ; 
var classicEnumerator = tempString.GetEnumerator() ; // non-generic version of enumerator. 
List<string> tempList = new List<string>() ; 
tempList.Add("Hello") ; 
tempList.Add(" World") ; 
var genericEnumerator = tempList.GetEnumerator() ; // generic version of enumerator. 

回答

3

這只是因爲Array早於泛型(它是在.NET 2.0中引入的)。

實際上,陣列也實現了IEnumerable<T>接口,但他們做到了explicitly。所以你可以這樣做:

string[] tempString = new[]{"Hello World!"}; ; 
IEnumerable<string> enumerable = tempString; 
var genericEnumerator = enumerable.GetEnumerator() ; // generic version of enumerator 
+1

這是記錄在「重要」:http://msdn.microsoft.com/en-us/library/system.array.aspx –