当我输入此 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
子句中不起作用。
因此,DataRowCollection
中的项不会自动计算为 DataRow
,这有些奇怪。但我不知道它是什么。有人有解释吗?
更新
我真的很纠结要标记哪个答案(Codeka 和 Oliver)...最后,我决定标记 Codeka,因为它确实回答了我的问题,但 Oliver 回答了我应该问的问题:)
最佳答案
那是因为 DataRowCollection类仅实现 IEnumerable
的非泛型版本。所以编译器不知道变量的类型是什么。
通过显式地将类型放在那里,您基本上告诉编译器生成从 object
到 DataRow
的显式转换。
在泛型可用之前的 .NET 1.x 时代,您会发现许多集合和类都存在这个问题。
关于c# - 为什么 var 在 "foreach (var row in table.Rows)"中评估为 System.Object ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2786727/