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

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

foreach (var Item in DataTable.Rows) { 

而不是必须这样做

 foreach (DataRow Item in DataTable.Rows) { 

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

 foreach (var Employee in Staff) { // string[] Staff etc... 

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

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

Rows有效地返回IEnumerableDataRowCollection ),因此编译器只能选择object作为var的类型。 如果要使用var请使用Rows.Cast

Cast是在Enumerable上定义的,因此您必须包含System.Linq。

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

 foreach (var row in DataTable.AsEnumerable()) { ... }