При чтении поста были даны некоторые моменты без примера :
Для реализации IEnumerable/IEnumerable необходимо предоставить перечислитель:
• Если класс "оборачивает" другую коллекцию, возвращая перечислитель обернутой коллекции.
• Через итератор с использованием yield return.
• Путем создания собственной реализации IEnumerator/IEnumerator
(Мой детский разум интерпретирует это как)
(пункт 1)
If the class is "wrapping" another collection, by returning the
wrapped collection's enumerator.
Будет ли это означать..
class StringCollections
{
//A class is wrapping another collection
string[] names=new string {“Jon Skeet”,”Hamish Smith”,
”Marc Gravell”,”Jrista”,”Joren”};
//by returning the wrapped collection’s enumerator
public IEnumerator GetEnumerator( )
{
// What should I return here ?
//like the following ?
yield return names[0];
yield return names[1];
yield return names[2];
....
(or)
foreach(string str in names)
{
yield return str;
}
}
}
(пункт 2)
•Via an iterator using yield return.(This point was well explained
by Marc Gravell)
Точка 3
By instantiating your own IEnumerator/IEnumerator<T> implementation*
Что здесь представляет пункт 3? Поскольку нет примера, я не получил его. Означает ли это, что я могу создать собственный счетчик .. (правильно?). Мой вопрос здесь в том, что когда предварительных счетчиков/перечислителей достаточно (как новичок, я не должен слепо подтверждать это) для итераций, почему я должен заботиться о пользовательском? Хорошо пример прояснит мои сомнения.
Спасибо за чтение этой длинной истории и добрый ответ.