2

我有一个项目,它将来自 SQL 的一些数据存储在 a 中DataTable,然后将每个数据映射DataRow到一个自定义类实例。

当我遍历属性Rows(类型为)DataRowCollection时,没有类型推断。

所以这不起作用:

var dt = new DataTable();
foreach(var row in dt.Rows)
{
    int id = Int32.Parse(row.ItemArray[0].ToString());
    // doesn't compile
}

但这确实:

var dt = new DataTable();
foreach(DataRow row in dt.Rows)
{
    int id = Int32.Parse(row.ItemArray[0].ToString());
}

为什么编译器无法确定它是什么类型rowvar在枚举 a 的情况下,关键字可以代表其他东西吗DataRowCollection?除了数据行之外,还有其他可以在 a 中枚举的内容DataRowCollection吗?

这就是你需要明确的原因吗?

4

1 回答 1

4

因为DataRowCollection实现IEnumerable(via InternalDataCollectionBase) 但不是通用的 typed IEnumerable<T>。班级太老了。

通过在中指定类型,foreach您正在隐式转换它。

于 2013-11-16T22:28:51.037 回答