c# - 为什么 var 在 "foreach (var row in table.Rows)"中评估为 System.Object ?

标签 c# ado.net

当我输入此 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。所以,问题不在于 varforeach 子句中不起作用。


因此,DataRowCollection 中的项不会自动计算为 DataRow,这有些奇怪。但我不知道它是什么。有人有解释吗?


更新

我真的很纠结要标记哪个答案(Codeka 和 Oliver)...最后,我决定标记 Codeka,因为它确实回答了我的问题,但 Oliver 回答了我应该问的问题:)

最佳答案

那是因为 DataRowCollection类仅实现 IEnumerable 的非泛型版本。所以编译器不知道变量的类型是什么。

通过显式地将类型放在那里,您基本上告诉编译器生成从 objectDataRow 的显式转换。

在泛型可用之前的 .NET 1.x 时代,您会发现许多集合和类都存在这个问题。

关于c# - 为什么 var 在 "foreach (var row in table.Rows)"中评估为 System.Object ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2786727/

相关文章:

c# - 字节数组到 c# 中的双转换

c# - 在 WPF 中配置 ListBox,这样我就可以在不按住 CTRL 键的情况下选择多个项目

c# WCF 测试 EntityDescriptor

c# - 如何在 C# 中通过 shell 执行文件?

c# - 拦截SqlCommand对数据库执行的查询

.net - 如何在不创建大缓冲区的情况下将大型 .NET 对象图序列化为 SQL Server BLOB?

c# - 如何回调主线程以启用来自后台工作线程的按钮

asp.net - .net 仍然使用 ADO.net 吗?

visual-studio-2010 - 无法在 VS 2010 项目中添加 ADO.NET 数据服务项

c# - 调用带返回值的存储过程