Любая реализация IEnumerable<T>
должна возвращать класс. Из соображений производительности может быть полезно иметь метод GetEnumerator
, который возвращает структуру, которая предоставляет методы, необходимые для перечисления, но не реализует IEnumerator<T>
; этот метод должен отличаться от IEnumerable<T>.GetEnumerator
, который затем должен быть реализован явно.
Использование этого подхода позволит повысить производительность, когда класс перечисляется с использованием цикла foreach или цикла «Для каждого» в C # или vb.net или в любом контексте, в котором код, выполняющий перечисление, будет знать, что перечислитель является структурой , но избегайте ловушек, которые иначе могли бы возникнуть, когда перечислитель упакован и передан по значению.