Почему массив возвращает классический Enumerator?

Изучая IEnumerator и IEnumerator<T>, я наткнулся на следующее утверждение:

Если мы вызываем GetEnumerator() для любой коллекции, мы в основном получаем типобезопасную версию, то есть «общую» версию, заметным исключением в этом случае является массив, который возвращает классическую (неуниверсальную) версию.

У меня такой вопрос:-
Почему массивы возвращают "классический" Enumerator при вызове функции GetEnumerator(), а другие структуры данных, такие как List<T> и другие, возвращают общий Enumerator?

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.

person Pratik Singhal    schedule 09.01.2014    source источник


Ответы (1)


Это просто потому, что Array предшествует дженерикам (которые были представлены в .NET 2.0).

На самом деле массивы тоже реализуют интерфейс IEnumerable<T>, но делают это явно. Итак, вы можете сделать это:

string[] tempString = new[]{"Hello World!"}; ;
IEnumerable<string> enumerable = tempString;
var genericEnumerator = enumerable.GetEnumerator() ; // generic version of enumerator
person Thomas Levesque    schedule 09.01.2014
comment
Что задокументировано по адресу: msdn.microsoft.com/en-us/ библиотека/система.массив.aspx - person Tim Schmelter; 09.01.2014