在 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# 则不需要。

最佳答案

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

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

关于c# - 为什么匿名操作可以在 C# 中的一行中调用,而不是 VB?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14348817/

10-13 05:22