我有什么理由不能做到以下几点:
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的集合?
当我进入这个foreach声明时......
foreach (var row in table.Rows)
Run Code Online (Sandbox Code Playgroud)
... var的工具提示说 class System.Object
我很困惑为什么不是class System.Data.DataRow.
(如果你想知道,是的,我using System.Data在我的代码文件的顶部.)
如果我明确声明类型,如...
foreach (DataRow row in table.Rows)
Run Code Online (Sandbox Code Playgroud)
...它没有错误,工作正常.
如果我这样做......
var numbers = new int[] { 1, 2, 3 };
foreach (var number in numbers)
Run Code Online (Sandbox Code Playgroud)
... var评估为struct System.Int32.所以,问题var不是在foreach子句中不起作用.
因此,DataRowCollection项目不会自动评估的位置有些奇怪DataRow.但我无法弄清楚它是什么.有人有解释吗?
更新
我真的被撕裂了对Mark的回答(Codeka和Oliver)......最后,我决定标记Codeka,因为它真的回答了我的问题,但Oliver回答了我应该问的问题:)
foreach (var row in table.Rows)
{
DoSomethingWith(row);
}
Run Code Online (Sandbox Code Playgroud)
假设我正在使用标准System.Data.DataTable(有一个System.Data.DataRow对象集合),上面的变量'row'解析为一个object类型,而不是一个System.Data.DataRow.
foreach (DataRow row in table.Rows)
{
DoSomethingWith(row);
}
Run Code Online (Sandbox Code Playgroud)
像我期望的那样工作.这有什么特别的原因吗?
谢谢.