Подтвердить что ты не робот

Почему массивы в .net только реализуют IEnumerable, а не IEnumerable <T>?

Я реализовал свой собственный класс ArrayList и был удивлен, когда понял, что

public System.Collections.Generic.IEnumerator<T> GetEnumerator() {
    return _array.GetEnumerator();
}

не работает. Какова причина, по которой массивы не реализуют IEnumerator в .NET?

Есть ли какая-нибудь работа?

Спасибо

4b9b3361

Ответ 1

Массивы реализуют IEnumerable<T>, но это делается как часть специальных знаний, которые CLI имеет для массивов. Многие инструменты не будут показывать эту реализацию. См. Параграф в примечаниях, начиная с примечания "Начиная с .NET Framework 2.0" в документации (документация для более ранних версий .NET: найдите "Важный" блок).

Вы можете добавить бросок:

return ((IEnumerable<T>)_array).GetEnumerator();

Ответ 2

Вы можете использовать общий метод IEnumerable<T> OfType<T>() из пространства имен System.Linq, который расширяет интерфейс IEnumerable. Он будет отфильтровывать все элементы, тип которых отличается от T и возвращает IEnumerable<T> collection. Если вы используете оператор преобразования (IEnumerable<T>)_array, это может быть небезопасно, потому что System.Array (и другие неродственные типы) хранит элементы типа System.Object.