为什么VB Parallel.ForEach不能推断我的循环项类型?

时间:2012-07-06 06:23:01

标签: c# vb.net generics task-parallel-library type-inference

我有一个班级Parent,其属性ItemsList(of Child)

如果我使用此代码

Parallel.ForEach()(parent.Items,
            Sub(item)
                item.DoSomething()
            End Sub)

我收到编译器警告No overload for method ForEach() accepts this count of arguments

如果我将代码更改为

Parallel.ForEach(of Child)(parent.Items,
            Sub(item)
                item.DoSomething()
            End Sub)

它有效。

然而,在c#中我可以写

Parellel.ForEach(parent.Items, item =>
    {
        item.DoSomething();
    });

为什么VB在这种情况下不推断?

2 个答案:

答案 0 :(得分:5)

在你的第一个VB例子中,你有一组额外的括号,所以你正在调用.ForEach没有参数。删除它们,它将工作:

Parallel.ForEach(parent.Items,
         Sub(item)
            item.DoSomething()
         End Sub)

答案 1 :(得分:3)

如果希望VB编译器推断类型参数,则不提供类型参数(Of )括号:

Parallel.ForEach(parent.Items,
        Sub(item)
            item.DoSomething()
        End Sub)

以同样的方式,就像您希望C#编译器推断类型一样,您不提供类型参数<>尖括号。

该错误试图告诉您VB编译器在您的第一个示例中看到的是使用 no 参数调用ForEach () 跟随< / em>通过调用来自第一次调用的返回值。