似乎我们可以只进行正常的静态检查。我不确定在这种情况下我看到了什么优势。我错过了什么?
答案 0 :(得分:3)
这里的问题是foreach
是在泛型之前设计的,直到.NET 2.0才存在。对于.NET 1.1,如果您使用了集合类,则IEnumerator
接口的Current
属性始终返回System.Object
。
通过让foreach做演员表,你可以写:
foreach(string item in collection)
而不是明确地写:
foreach(object temp in collection)
{
string item = (string)temp;
当然,使用.NET 2,这不再是一个问题了。
答案 1 :(得分:1)
foreach
的历史记录早于通用IEnumerable
,因此有助于枚举ArrayList
等集合。既然.NET具有通用集合并且很少使用ArrayList
,那么免费转换似乎与现在添加该功能时设计的方式有点阻抗不匹配。
尽管如此,现在我们已经拥有了这个功能,你仍然会看到人们甚至使用泛型集合来使用它来构建他们想要的类型,从而避免了几行代码。这与ArrayList
天的使用方式相差无几。