Sch*_*tzE 50 parallel-processing c#-4.0
我想使用新的Parallel.ForEach函数来遍历数据表并对每一行执行操作.我想转换下面的代码:
foreach(DataRow drow in dt.Rows)
{
...
Do Stuff
...
}
Run Code Online (Sandbox Code Playgroud)
对于这段代码:
System.Threading.Tasks.Parallel.ForEach(dt.Rows, drow =>
{
...
Do Stuff
...
});
Run Code Online (Sandbox Code Playgroud)
当我运行新代码时,我收到错误:
无法从用法中推断出方法'System.Threading.Tasks.Parallel.ForEach(System.Collections.Generic.IEnumerable,System.Action)'的类型参数.尝试显式指定类型参数.
这个的正确语法是什么?
Jon*_*eet 106
DataTable.Rows返回DataRowCollection只实现的IEnumerable,而不是IEnumerable<DataRow>.使用AsEnumerable()扩展方法on DataTable(from DataTableExtensions)代替:
Parallel.ForEach(dt.AsEnumerable(), drow =>
{
...
Do Stuff
...
});
Run Code Online (Sandbox Code Playgroud)
Kev*_*NET 11
这比接受的答案要好,因为这不需要引用System.Data.DataSetExtensions:
Parallel.ForEach(dt.Rows.Cast<DataRow>(), dr =>
Run Code Online (Sandbox Code Playgroud)
要将ForEach与非泛型集合一起使用,可以使用Cast扩展方法将集合转换为泛型集合,如本示例所示.
Parallel.ForEach()期望第一个参数是IEnumerable <>类型.DataTable.Rows不是,但您可以使用AsEnumerable()扩展方法将其转换为一个.尝试:
... Parallel.ForEach(dt.AsEnumerable(), drow => ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48681 次 |
| 最近记录: |