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