2012-07-06 80 views
2

我有一个类Parent拥有财产Items这是一个List(of Child)为什么VB Parallel.ForEach不能推断我的循环项类型?

如果我使用此代码

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

你可以使用'Sub(item As Child)''更具体的参数类型吗? – 2012-07-06 06:32:08

回答

5

在你的第一个VB例子中,你有一个额外的括号集,所以你打电话.ForEach wih没有参数。删除他们,也将努力:

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

愚蠢的错误,谢谢。 – 2012-07-06 08:03:39

3

如果你想在VB编译器来推断类型参数,你没有提供的类型参数(Of)括号:

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

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

错误试图告诉你,什么VB编译器看到在你的第一个例子是ForEach通话与没有参数()由呼叫无论从第一调用的返回值是跟着

+0

shf301是第一个,但无论如何+1 – 2012-07-06 08:03:56

相关问题