Примечание. Я написал эту серию только для развлечения и для того, чтобы сделать несколько заметок о том, что я узнал на уроке. История может не быть «выдающейся» или «отличной». :D

Итак, это примечание касается: IEnumerable, IEnumerator.

IEnumerable

IEnumerable — это в основном интерфейс. IEnumerable позволяет нам использовать ключ «foreach» для объекта класса, который устанавливает этот интерфейс. Обычно мы используем IEnumerable в списке. Если мы используем Generics List‹›, интерфейс будет IEnumerable‹›.

В C# все коллекции (например, списки, словари, стеки, очереди и т. д.) являются перечисляемыми, поскольку они реализуют IEnumerable интерфейс.

Например, мы объявляем класс Post следующим образом:

В основной программе мы создаем список Person и выполняем цикл для каждого элемента с помощью команды «foreach» следующим образом:

И теперь скрипт должен работать идеально.

Итак, самое интересное, что, если нам не нравится использовать List‹› для создания нового списка? Мы хотим создать собственное имя класса: FacebookWall. Так почему мы хотим это сделать? Ну, просто мы можем настроить какую-то другую специальную пустоту, функцию, метод, которых нет в List‹›. Итак, класс FacebookWall будет так:

Теперь основной класс будет:

Теоретически это должно работать, верно? Но, к сожалению, мы получили ошибку: «оператор foreach не может работать с переменными типа 'FacebookWall', потому что 'FacebookWall' не содержит общедоступного определения экземпляра для ' GetEnumerator».

Причина в том, что мы не настроили интерфейс IEnumerable для FacebookWall. А теперь, если мы добавим интерфейс IEnumerable. Становится вот так.

Интерфейс IEnumerableимеет 2 метода с именем GetEnumerator, один возвращает IEnumerator‹› и один возвращает IEnumerator. сильный>. Первый находится в новом типе .NET для поддержки классов дженериков, а другой просто необходим для поддержки более старого .NET, который не поддерживает дженерики.

По сути, в GetEnumerator вы должны вернуть некоторый объект, классы, которые настраивают интерфейс IEnumerator (объект List всегда будет содержать интерфейс IEnumerator). Итак, здесь объектом является facebook (который представляет собой список). Вот почему я возвращаю facebook.GetEnumerator();

А в версии дженериков без поддержки я просто возвращаю this.GetEnumerator();, что означает «этот объект». Теперь, если вы запустите скрипт, он будет работать отлично. :D

В следующем рассказе я расскажу о IEnumerator и шаблоне итератора. Я надеюсь, что это (как-то) поможет вам, ребята. Увидимся позже.