2012-01-17 82 views
18

考慮下面的代碼示例:List.ForEach在vb.net - 困擾我

TempList.ForEach(Function(obj) 
     obj.Deleted = True 
    End Function) 

這一個:

TempList.ForEach(Function(obj) obj.Deleted = True) 

我希望的結果是一樣的,但是第二代碼示例不會更改列表TempList中的對象。

這篇文章更能理解爲什麼......?或者至少得到一些幫助理解爲什麼...

回答

40

這是因爲您使用Function而不是Sub。由於Function返回一個值,因此編譯器認爲等號(=)用作比較而不是賦值。如果更改FunctionSub,編譯器會正確地考慮等號作爲賦值:如果你有一個多拉姆達

TempList.ForEach(Sub(obj) obj.Deleted = True) 

;你不會有這樣的問題:

TempList.ForEach(Function(obj) 
        obj.Deleted = True 
        Return True 
       End Function) 

顯然,對foreach方法是沒有意義的使用Function因爲返回值將不會被使用,所以你應該使用Sub

+0

啊,現在非常有意義,非常感謝。這對我來說還是很新的:-) –

+0

我必須承認,起初我並不知道發生了什麼;-) –

+0

我很驚訝這個東西有多強大,也迫使我自己學習這個是LINQ。 –