将foreach转换为变量类型背后的想法是什么?

时间:2011-05-12 17:53:14

标签: c#

似乎我们可以只进行正常的静态检查。我不确定在这种情况下我看到了什么优势。我错过了什么?

2 个答案:

答案 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天的使用方式相差无几。