Из того, что я читал, было принято дизайнерское решение, чтобы определенные типы перечислителей коллекций были изменяемыми структурами, а не ссылочными типами из соображений производительности. List.Enumerator - самый известный.
Я исследовал старый код, в котором использовались массивы, и был удивлен, обнаружив, что массивы C # возвращают тип SZGenericArrayEnumerator в качестве своего универсального типа перечислителя, который является ссылочным типом.
Мне интересно, знает ли кто-нибудь, почему универсальный итератор Array был реализован как ссылочный тип, когда во многих других коллекциях, критичных к производительности, вместо этого использовались изменяемые структуры.