3

在 C# 中

(new Action(() => MessageBox.Show("Hello"))).BeginInvoke(null, null);

在 VB 中,翻译后的代码无法编译

(New Action(Sub() MessageBox.Show("Hello"))).BeginInvoke(nothing, nothing)

但是在 VB 中,我可以将 BeginInvoke 的结果设置为隐式变量a,它会运行(感谢@Ric 在另一篇文章中的建议)

Dim a = (New Action(Sub() MessageBox.Show("Hello"))).BeginInvoke(Nothing, Nothing)

但现在我想知道为什么 VB 在这种情况下需要在左侧设置一些东西,而 C# 不需要。

4

2 回答 2

5

VB.NET 只需要一个标识符。您不能像那样直接调用 sub 或其他成员。但是,您可以Call改为使用。

当被调用的表达式不以标识符开头时,通常使用 Call 关键字。不建议将 Call 关键字用于其他用途。

http://msdn.microsoft.com/en-us/library/sxz296wz(v=vs.110).aspx

Call (New Action(Sub() MessageBox.Show("Hello"))).BeginInvoke(nothing, nothing)
于 2013-01-15T23:31:54.023 回答
2

VB 不允许在实例化上直接调用成员调用。利用:

CType(New Action(Function() MessageBox.Show("Hello")), Action).BeginInvoke(Nothing, Nothing)
于 2013-01-15T23:30:58.660 回答