【问题标题】: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】:

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

当您在 foreach 中明确声明类型时,您指示 c# 将强制转换添加到每个调用中,这就是它起作用的原因。

【讨论】:

    【解决方案2】:

    发生隐式转换。另请注意,如果无法进行强制转换,则可能会引发 InvalidCastException

    【讨论】:

      【解决方案3】:

      table.Rows 是一个DataRowCollection,它是IEnumberable(而不是IEnumerable<T>,T 是DataRow),所以它不是DataRow 的强类型,而是一个对象,即它是对象的集合.

      您可以使用 DataTable 扩展名 - http://msdn.microsoft.com/en-us/library/system.data.datatableextensions.asenumerable.aspx

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

      【讨论】:

        【解决方案4】:

        试试这个:

        System.Data.DataTable dt = new System.Data.DataTable();
        
        foreach (var row in dt.Rows.Cast<System.Data.DataRow>())
        {
        
        }
        

        要使用 Rows.Cast,您必须使用 System.Linq。

        【讨论】:

          猜你喜欢
          • 2023-03-27
          • 1970-01-01
          • 2013-04-19
          • 2013-09-04
          • 2010-09-28
          • 2018-02-01
          • 1970-01-01
          • 2010-09-16
          • 1970-01-01
          相关资源
          最近更新 更多