在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#则没有。
答案 0 :(得分:5)
VB.NET只需要一个标识符。您不能直接调用子或其他成员。但是,您可以改为使用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)
答案 1 :(得分:2)
VB不允许直接在实例化上调用成员调用。 使用:
CType(New Action(Function() MessageBox.Show("Hello")), Action).BeginInvoke(Nothing, Nothing)