2010-10-27 82 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