Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 预测变量类型背后的想法是什么?_C# - Fatal编程技术网

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
-问题消失(除了正确/无操作分配外,您无法执行任何操作)