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)

しかし、ここで、C#ではなく、この場合にVBで左側に何かを設定する必要がある理由を知りたいと思います。

4

2 に答える 2

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)
于 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 に答える