Вопросы же быстродействия и производительности в наше время вообще остро не стоят. Если есть критический кусок кода, его проще переписать на плюсах и подключить в проект как внешний компонентсоздатели StackOverflow с вами не согласны. Как и программисты . net, не зря они сделали в стандартных коллекциях инемераторы структурами.
Structural systems are used to determine if types are equivalent and whether a type is a subtype of another. It contrasts with nominative systems, where comparisons are based on the names of the types or explicit declarations, and duck typing, in which only the part of the structure accessed at runtime is checked for compatibility.. Ну и про компилятор, он выдает ошибку, если в коллекции нет GetInumerator и если в инуменаторе нет MoveNext и Current. Кстати самый яркий пример утиной типизации в шарпе это dynamic.