首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么var在"foreach (table.Rows中的var row )“中求值为System.Object?

为什么var在"foreach (table.Rows中的var row )“中求值为System.Object?
EN

Stack Overflow用户
提问于 2010-05-07 14:49:23
回答 2查看 1.6K关注 0票数 18

当我输入这个foreach语句时...

代码语言:javascript
复制
foreach (var row in table.Rows)

var的...the工具提示显示为class System.Object

我搞不懂为什么不是class System.Data.DataRow

(如果您想知道,是的,我的代码文件的顶部有using System.Data。)

如果我显式声明该类型,如...

代码语言:javascript
复制
foreach (DataRow row in table.Rows)

...it工作得很好,没有错误。

如果我这么做了..。

代码语言:javascript
复制
var numbers = new int[] { 1, 2, 3 };
foreach (var number in numbers)

...var的计算结果为struct System.Int32。因此,问题不在于foreach子句中的var不起作用。

所以,DataRowCollection有一些奇怪的地方,项目不会自动计算为DataRow。但我想不出那是什么。有谁能解释一下吗?

更新

我真的很纠结到底该怎么回答(Codeka ...In Oliver ),我决定给Codeka打个记号,因为它确实回答了我的问题,但Oliver回答了我应该问的问题:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-07 14:54:31

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

通过显式地将类型放入其中,基本上就是告诉编译器生成从objectDataRow的显式转换。

这是在泛型出现之前的.NET 1.x版本中添加的许多集合和类存在的问题。

票数 19
EN

Stack Overflow用户

发布于 2010-05-07 15:27:50

虽然codeka是正确的,但是还有一些其他的方法可以让DataTableDataRow变得更加方便。

使用.Net 3.5,您可以添加程序集System.Data.DataSetExtensions

它包含一些扩展函数,如AsEnumerable(this System.Data.DataTable)Field<T>(this System.Data.DataRow, int),您可以在foreach循环中调用它,并将列直接转换为正确的类型:

代码语言:javascript
复制
int columnIndex = 2;

foreach(var row in MyDataTable.AsEnumerable())
{
    var content = row.Field<double>(columnIndex);
}
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2786727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档