Почему массивы в .NET только реализуют iEnumerable и не Ieenumerable ?
-
03-10-2019 - |
Вопрос
Я реализовал свой собственный класс ArrayList и был удивлен, когда понял, что
public System.Collections.Generic.IEnumerator<T> GetEnumerator() {
return _array.GetEnumerator();
}
не работал. Какова причина массивов не реализует IEnumerator в .NET?
Есть ли работа - вокруг?
Спасибо
Решение
Массивы выполняют реализацию IEnumerable<T>
, но это делается как часть особых знаний, Кли имеет для массивов. Это работает так, как будто это была явная реализация (но нет: это делается во время выполнения). Многие инструменты не покажут эту реализацию, это описано в Замечания раздел Array
Обзор класса.
Вы можете добавить актеры:
return ((IEnumerable<T>)_array).GetEnumerator();
Примечание, пожилые MSDN (Pre Docs.microsoft.com) покрытие этого изменилось несколько раз с разными версиями .NET, проверьте наличие замечания раздел.
Другие советы
Вы можете использовать универсальный метод IEnumerable<T> OfType<T>()
От пространства имен System.linq, который расширяет интерфейс iEnumerable. Он отфильтровал все элементы, тип которых отличается от т и возврата IEnumerable<T> collection
. Отказ Если вы используете (IEnumerable<T>)_array
Оператор преобразования, это может не быть в безопасности, потому что System.Array
(и другие ненгнераторы) хранит предметы типа System.Object
.