答案 0 :(得分:11)
假设您想要等同于IEnumerable<int>
,但使用的是C#1.0。你可以实现IEnumerable
- 但这需要在每次迭代时装箱和拆箱。使用foreach
的鸭子打字版本你可以在没有任何拳击的情况下逃脱。在许多情况下,拳击实际上并没有那么有害(我倾向于发现the performance hit is exaggerated),但它仍然不够优雅。
我强烈地,强烈怀疑如果在C#1.0中存在泛型,foreach
将被限制为IEnumerable<T>
。
答案 1 :(得分:1)
鸭子类型的foreach与IEnumerable相比还有一些优势:
第二个优势实际上只能通过鸭子打字来实现。