为什么匿名操作只能在C#中调用一行,而不能在VB中调用?

为什么匿名操作只能在C#中调用一行,而不能在VB中调用?,c#,.net,vb.net,C#,.net,Vb.net,在C中# (新操作(()=>MessageBox.Show(“Hello”)).BeginInvoke(null,null); 在VB中,翻译后的代码不会编译 (新操作(Sub()MessageBox.Show(“Hello”)).BeginInvoke(无,无) 但是在VB中,我可以将BeginInvoke的结果设置为隐式变量a,它将运行(感谢@Ric在另一篇文章中的建议) dima=(新操作(Sub()MessageBox.Show(“Hello”)).BeginInvoke(无,无)

在C中#

(新操作(()=>MessageBox.Show(“Hello”)).BeginInvoke(null,null);
在VB中,翻译后的代码不会编译

(新操作(Sub()MessageBox.Show(“Hello”)).BeginInvoke(无,无)
但是在VB中,我可以将BeginInvoke的结果设置为隐式变量
a
,它将运行(感谢@Ric在另一篇文章中的建议)

dima=(新操作(Sub()MessageBox.Show(“Hello”)).BeginInvoke(无,无)

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

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


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

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


如果将
Call
放在它前面(不执行
dim a=
),它会编译吗?如果要报告编译错误,您应该始终显示该错误是什么。请注意,您不需要像这样复杂的东西来显示问题
New Random().Next()
也给出了一个错误。@John Skeet它只是说“语法错误”。除此之外没有别的。前面的括号由编译器加下划线。@DanV Jon Skeet的观点是,您应该始终在问题中包含错误。=)这很有效。它让我想起了我的VB6时代。谢谢:)@DanV是的,这绝对是VB6遗留下来的一部分。我自己也遇到过。我最近进入了一个VB.NET项目,作为一名非VB.NET开发人员,我不得不像其他许多人一样面对这个障碍;)这很有效。在VB中,当C#允许时,我们不能直接在实例化时调用成员调用,这有什么原因吗?
CType(New Action(Function() MessageBox.Show("Hello")), Action).BeginInvoke(Nothing, Nothing)
Call (New Action(Sub() MessageBox.Show("Hello"))).BeginInvoke(nothing, nothing)