为什么数组返回经典的枚举器?

时间:2014-01-09 13:06:28

标签: c# .net enumerator ienumerator

在研究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.

1 个答案:

答案 0 :(得分: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