这是因为 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]);
});