Перечислители в C # не совпадают с перечислителями C ++ из вашего вопроса. В C # у вас нет ни begin
, ни end
элементов контейнера. У вас есть только элемент Current
и метод Next()
. Например, он позволяет получить намного больше последовательностей - вы можете перечислять через бесконечность последовательности случайных чисел, которые, очевидно, не имеют ни начала, ни конца.
Итак, вы не можете сделать это в C #, как в коде C ++, используя только IEnumerable
классы. Лучший способ сделать это - использовать интерфейс System.Collection.Generics.IList<T>
. Многие типы (например, массивы) наследуют этот интерфейс.
Если вы используете IEnumerable
, то внутри вашего типа вы (в большинстве случаев) перебираете некоторую коллекцию. Если вы сделаете это - вы можете просто реализовать интерфейс IList<T>
.
Есть и другое решение - в C # списки и массивы ссылочных типов содержат только ссылку на объект. Итак, вы можете скопировать свои данные в локальный список и работать с ним. Но это зависит от вашей памяти и требований к производительности.