2012-07-06 49 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

相關問題