很多人问我为什么,我没有很好的答案。
显然有一个很好的理由。有人知道吗?
我在这里搜索并找到了这个问题。它解释了它是如何工作的,但没有解释为什么。
假设您想要等效的 anIEnumerable<int>
但正在使用 C# 1.0。您可以实施IEnumerable
- 但这需要在每次迭代时进行装箱和拆箱。使用那种鸭子打字版本的foreach
你可以不用任何拳击就可以逃脱。在许多情况下,拳击实际上并没有那么有害(我倾向于发现性能影响被夸大了),但它仍然不雅。
我强烈、强烈怀疑,如果泛型出现在 C# 1.0 中,foreach
就会被限制在IEnumerable<T>
.
与 IEnumerable 相比,鸭式 foreach 有几个优点:
第二个优势实际上只能通过鸭式打字来实现。