为什么我不能做foreach(DataTable.Rows中的var Item)?

Gat*_*ler 28 .net c# datatable foreach datarow

我有什么理由不能做到以下几点:

foreach (var Item in DataTable.Rows) {
Run Code Online (Sandbox Code Playgroud)

而不是必须这样做

foreach (DataRow Item in DataTable.Rows) {
Run Code Online (Sandbox Code Playgroud)

我原以为这是可能的,就像在其他数据类型上一样.例如:

foreach (var Employee in Staff) { // string[] Staff etc...
Run Code Online (Sandbox Code Playgroud)

当我尝试第一个foreach循环时,我得到错误CS0021:无法将带有[]的索引应用于'object'类型的表达式.

为什么编译器不能确定.Rows返回DataRows的集合?

Bri*_*sen 28

Rows有效返回IEnumerable(DataRowCollection),因此编译器只能选择object类型var.Rows.Cast<DataRow>如果要使用,请使用var.

CastEnumerable上定义,因此您必须包含System.Linq.


Jon*_*eet 23

Brian对此有充分的理由,但有一种更简单的方法可以避免它:使用DataTableExtensions.AsEnumerable():

foreach (var row in DataTable.AsEnumerable())
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 我会说问题的真正解决方案是在这种情况下不使用var ... (8认同)