这是因为 DataRowCollection 类只实现了 System.Collections.IEnumerable 接口,而没有实现 System.Collections.Generic.IEnumerable 接口,所以该 foreach 语句中的 row 变量的类型被推断为 System.Object 类。

//有效代碼:

  DataTable dt = new System.Data.DataTable();
  dt.Columns.Add(new DataColumn("id",typeof(String)));
    dt.Columns.Add(new DataColumn("name", typeof(String)));
    dt.Rows.Add(new string[] { "111", "張三" });
    dt.Rows.Add(new string[] { "222", "李四" });
    dt.Rows.Add(new string[] { "333", "韓當" });
    dt.Rows.Add(new string[] { "444", "周泰" });
    dt.Rows.Add(new string[] { "555", "武松" });
    dt.Rows.Add(new string[] { "666", "奏思" });
    dt.Rows.Add(new string[] { "777", "秦漢" });
    dt.Rows.Add(new string[] { "888", "劉備" });          
    IEnumerable<DataRow> rows = dt.Rows.Cast<DataRow>();
    Parallel.ForEach<DataRow>(rows, item =>
    {
       object[] cells= item.ItemArray;
        Console.WriteLine(cells[0]+" "+ cells[1]);
    });

本文转载:CSDN博客