Почему массивы в .NET только реализуют iEnumerable и не Ieenumerable ?

StackOverflow https://stackoverflow.com/questions/2773740

Вопрос

Я реализовал свой собственный класс 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top