使用C#var进行System.Data.Datarow的隐式类型

chr*_*ofr 17 c# datarow implicit-typing

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)

像我期望的那样工作.这有什么特别的原因吗?

谢谢.

Ser*_*sev 21

那是因为RowsDataRowCollection,IEnumerable而不是IEnumerable<DataRow>,这意味着推断的类型将是object.

当您明确声明输入时foreach,指示c#为每个调用添加强制转换,这就是它工作的原因.


PPC*_*der 5

发生隐式演员.另请注意,如果无法进行强制转换,则可以抛出InvalidCastException.