当我输入这个foreach
陈述...
foreach (var row in table.Rows)
...var 的工具提示说class System.Object
我很困惑为什么不是class System.Data.DataRow
.
(如果你想知道,是的,我有using System.Data
在我的代码文件的顶部。)
如果我显式声明类型,如......
foreach (DataRow row in table.Rows)
...它工作正常,没有错误。
另外如果我这样做...
var numbers = new int[] { 1, 2, 3 };
foreach (var number in numbers)
...var 评估为struct System.Int32
。所以,问题不在于var
不适用于foreach
clause.
所以,有一些奇怪的事情DataRowCollection
其中项目不会自动评估为DataRow
。但我不知道它是什么。有人有解释吗?
Update
我真的很纠结要标记哪个答案(Codeka 和 Oliver)...最后,我决定标记 Codeka,因为它真正回答了我的问题,但 Oliver 回答了我应该问的问题:)
那是因为数据行集合 http://msdn.microsoft.com/en-us/library/system.data.datarowcollection%28v=VS.100%29.aspx类仅实现非泛型版本IEnumerable
。所以编译器不知道变量的类型是什么。
通过显式地将类型放在那里,您基本上告诉编译器从object
to DataRow
.
在泛型可用之前,您会在 .NET 1.x 时代添加的许多集合和类中发现这个问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)