【问题标题】:Use of C# var for implicit typing of System.Data.Datarow使用 C# var 隐式键入 System.Data.Datarow
【发布时间】:2012-09-19 07:02:54
【问题描述】:
foreach (var row in table.Rows)
{
DoSomethingWith(row);
}
假设我正在使用标准System.Data.DataTable(它具有System.Data.DataRow 对象的集合),上面的变量“row”解析为object 类型,而不是System.Data.DataRow。
foreach (DataRow row in table.Rows)
{
DoSomethingWith(row);
}
按我的预期工作。这有什么特别的原因吗?
谢谢。
【问题讨论】:
标签:
c#
datarow
implicit-typing
【解决方案1】:
这是因为 Rows 是 DataRowCollection,而 IEnumerable 而不是 IEnumerable<DataRow>,这意味着推断的类型将是 object。
当您在 foreach 中明确声明类型时,您指示 c# 将强制转换添加到每个调用中,这就是它起作用的原因。
【解决方案2】:
发生隐式转换。另请注意,如果无法进行强制转换,则可能会引发 InvalidCastException。
【解决方案4】:
试试这个:
System.Data.DataTable dt = new System.Data.DataTable();
foreach (var row in dt.Rows.Cast<System.Data.DataRow>())
{
}
要使用 Rows.Cast,您必须使用 System.Linq。