DataTable test = new DataTable();
foreach (var r in test.Rows)
{
r[1].tostring();
}
为什么编译器不了解r是DataRow? 请参阅下图以获取错误消息。
答案 0 :(得分:12)
属性DataTable.Rows
使用旧样式(非泛型)集合。实际类型为DataRowCollection
,它定义了非{0}的an enumerator,因此它返回类型为DataTable test = new DataTable();
foreach (var r in test.AsEnumerable())
{
r[1].ToString();
}
的实例。为解决此问题,在名为DataTable.AsEnumerable
的框架(3.5+)的更高版本中提供了一种新的扩展方法,该方法返回正确类型的枚举器:
r
如果您遇到旧版本的.NET,则必须手动将DataRow
投射到function delayedUpdate(fn, delay, callback) {
var nextCall = Date.now();
var data = false;
return function () {
if (nextCall <= Date.now()) {
nextCall = Date.now() + delay;
fn(function (err, res) {
data = err ? false : res;
callback(err, data);
});
} else {
callback(null, data);
}
};
}
。
答案 1 :(得分:1)
DataTable.Rows
的类型是DataRowCollection
,它继承自InternalDataCollectionBase
,ICollection
是非通用的。{1}}。所以不是 ICollection<DataRow>
,而是objects
的集合。见here。
使用foreach (DataRow r in test.Rows)
,您明确告诉C#将每个对象强制转换为DataRow
答案 2 :(得分:0)
var是一个隐式类型!它别名任何类型!当你声明一个&#34; var类型&#34;你基本上是告诉编译器嘿看我不知道什么类型适合这个,所以右边的表达式评估的类型是合适的类型!
所以, 显然,每一行都作为一个对象返回,所以除非你将它们转换为适当的类型,否则它们将作为一个对象保留!