我有一个班级Parent
,其属性Items
为List(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在这种情况下不推断?
答案 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>通过调用来自第一次调用的返回值。