Предположим, вы хотели эквивалент IEnumerable<int>
, но использовали C # 1.0. Вы могли бы реализовать IEnumerable
- но это потребовало бы упаковки и распаковки на каждой итерации. Используя версию foreach
с типизацией утки, вы можете обойтись без бокса. Во многих случаях бокс на самом деле не был бы таким вредным (я склонен считать, что удар по производительности преувеличен ), но он все еще не элегантен.
Я сильно, сильно подозреваю, что если бы дженерики были в C # 1.0, foreach
был бы ограничен IEnumerable<T>
.