【问题标题】:Why does array returns classical Enumerator? [duplicate]为什么数组返回经典枚举器? [复制]
【发布时间】:2014-01-28 01:24:23
【问题描述】:

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

【问题讨论】:

    标签: c# .net enumerator ienumerator


    【解决方案1】:

    这只是因为 Array 早于泛型(在 .NET 2.0 中引入)。

    实际上,数组也实现了IEnumerable&lt;T&gt; 接口,但他们做到了explicitly。所以你可以这样做:

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

    【讨论】:

    猜你喜欢
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    相关资源
    最近更新 更多