C# 预测变量类型背后的想法是什么?
看起来我们可以有一个正常的静态检查任务。我不确定我是否看到这种情况的好处。我遗漏了什么?这里的问题是,C# 预测变量类型背后的想法是什么?,c#,C#,看起来我们可以有一个正常的静态检查任务。我不确定我是否看到这种情况的好处。我遗漏了什么?这里的问题是,foreach是在泛型之前设计的,泛型直到.NET 2.0才存在。在.NET 1.1中,如果使用集合类,则IEnumerator接口的属性始终返回System.Object 让foreach做演员,你可以写: foreach(string item in collection) 不必显式地编写: foreach(object temp in collection) { string
foreach
是在泛型之前设计的,泛型直到.NET 2.0才存在。在.NET 1.1中,如果使用集合类,则IEnumerator
接口的属性始终返回System.Object
让foreach做演员,你可以写:
foreach(string item in collection)
不必显式地编写:
foreach(object temp in collection)
{
string item = (string)temp;
诚然,对于.NET 2来说,这不再是一个真正的问题。foreach的历史早于generic
IEnumerable
,因此它促进了对集合(如ArrayList
)的枚举。既然.NET有了通用的集合,而且很少使用ArrayList
,那么自由转换看起来确实有点阻抗不匹配,如果现在添加该功能,它的设计方式可能会有点不匹配
尽管如此,现在我们有了这个特性,您仍然可以看到人们使用它,即使是泛型集合,也可以将其转换为他们所需要的类型,从而避免了几行代码。这与它在
ArrayList
中的使用方式相差不远。@Adi:Foreach使用非泛型IEnumerable
,并将添加隐式转换。我相信这就是Dejas在这里所指的…嗯。。。使用var
-问题消失(除了正确/无操作分配外,您无法执行任何操作)