2010-10-27 79 views
3

我已接受一個System.Action的方法,這就是我想給它餵食:VB.NET:Lambda表達式,可以使用賦值運算符,而不是平等

Function() Me._existingImports = Me.GetImportedAds() 

的事情是,它因爲它認爲我正在嘗試做一個比較,所以我抱怨=這個標誌,我不是。我想給Me._existingImports分配Me.GetImportedAds()的值,但VB.NET抱怨DataTable沒有a =運算符。

如何強制它使用賦值運算符而不是等號運算符?

在C#這工作完全正常:

() => this.existingImports = this.GetImportedAds() 

對於現在的解決辦法是使用一個獨立的方法,但是這比需要的方式更多的代碼。

+1

你發現了一個*真的*很好的理由升級到VS2010 – 2010-10-27 14:13:58

回答

8

使用Function()時,您確實定義了一個匿名函數,這意味着您將值映射到值。

因此Function()嚴格需求爲體,其中分配是表達式(如x42 ...)! (作業不像VB中的C風格語言那樣評價值)

因此,您需要的不是Function()而是Sub(),其中包含語句(操作)而不是值。

Sub() Me._existingImports = Me.GetImportedAds() 

C#不區分在這裏,(好得多)... => ...語法涵蓋了全部。

+0

嗯,我試過用Sub(),但是這給出了錯誤。這是使用VS2008。 – 2010-10-28 14:20:55

+0

是的。匿名'Sub()'已經被添加到VB2010中,不幸的是 - 到那時爲止 - 你並沒有真正的解決它的好方法。 – Dario 2010-10-28 17:52:38