var的行为

ViV*_*ViV 0 .net c#

DataTable test = new DataTable();
foreach (var r in test.Rows)
{
    r[1].tostring();
}
Run Code Online (Sandbox Code Playgroud)

为什么编译器不理解r是DataRow?有关错误消息,请参见下图.

在此输入图像描述

mel*_*okb 12

该属性DataTable.Rows使用旧样式(非泛型)集合.实际类型DataRowCollection定义非泛型的枚举器,因此它返回类型的实例object.为了解决这个问题,在框架(3.5+)的更高版本中提供了一种新的扩展方法,该方法DataTable.AsEnumerable返回一个正确类型的枚举器:

DataTable test = new DataTable();
foreach (var r in test.AsEnumerable())
{
    r[1].ToString();
}
Run Code Online (Sandbox Code Playgroud)

如果您遇到旧版本的.NET,则r必须DataRow手动转换.