3

これをどのように VB に変換しますか (.NET 4.0 / VS2010 を使用) ?

bw.DoWork += (o, args) =>
{
     Code Here
};

私は多分このように思った:

AddHandler bw.DoWork,
    Function(o, args)

        Code Here

    End Function

ただし、関数はすべてのコード パスで値を返すわけではありません。

アイデア?

4

6 に答える 6

3

そのようにすることはできませんが、次のように機能させることはできます。

  Sub New()    
    AddHandler bw.DoWork, AddressOf Stuff    
  End Sub

  Sub Stuff(ByVal o, ByVal args)    
    ' Code Here '   
  End Sub

基本的に、コードを呼び出すイベントを追加し、ルーチンに渡されたパラメーターを除いて、イベントが値を返すことはありません。それはそれを関数ではなくサブにします。

于 2010-02-23T15:58:51.230 に答える
3

VB.NETにはこれがありません

興味深いビット:

(..)VB には匿名メソッドはなく、ラムダ式のみです (匿名のアクション デリゲートを宣言する方法はありません)。

于 2010-02-23T15:46:04.330 に答える
2

.NET 4.0を使用してSubwayを試しましたが、エラーは発生しません

AddHandler bw.DoWork,
    Sub(sender As Object, e As System.ComponentModel.DoWorkEventArgs)

        'Code(Here)

    End Sub
于 2012-03-13T17:35:19.990 に答える
1

問題は、「CodeHere」が何をするのかを知る必要があるということです。関数は値を返す必要があります(Returnステートメントがあります)。値を返したくない場合は、関数をサブにする必要があります。

于 2010-02-23T15:49:32.047 に答える
0

2010年までマルチラインラムダを取得しません。VB9でマルチラインを変換する必要がある場合は、いくつかの回転を行う必要がありますが、それは可能です。最終的には、ホルダーオブジェクトを作成し、そのオブジェクトにプロパティを設定してから、共有関数を呼び出す必要があります。これは、C#の場合ほどエレガントではありません。

于 2010-02-23T16:03:50.507 に答える
0

VBNET2008 でラムダ式を使用しようとしたときに、似たようなものに出会いました。

キーワード Function は、ラムダ式が使用されていることをコンパイラに示すために使用されるため、式は値を返す必要があります。このシナリオでは、キーワード Sub を使用する方が適切ですが、VBNET2008 ではまだ使用できません。

VBNET2010 は、ラムダ式内で Subs を許可することでこれに対処する必要があります。

SOに関するこの質問で私にとってうまくいった回避策の例を次に示し ます。このC#に相当するVB.NETコードは何ですか...

つまり、ラムダ式をメソッドのコアに記述する代わりに、AddressOf Sub を使用して作業を実行する Sub をポイントする必要があります。

David Parvin も、必要に応じて回避策を書いています。

編集:

いつでもデリゲート ソリューションを選択できます。プライベート デリゲート サブ MyMethodAsync()

Public Sub Button1_Click(...) Handles Button1.Click
    Dim myMethodAsync As MyMethodAsync = AddressOf MyDoWorkAsync

    _myBackgroundWorker.RunWorkerAsync(myMethodAsync)
    Dim loadingForm = New LoadingForm()
    loadingForm.ShowDialog()
End Sub

Private Sub _myBackgroundWorker_DoWork([parameters here...]) Handles _myBackgroundWorker.DoWork
    ' Do some stuff...
End Sub

無名メソッドではないことはわかっているので、2008 年であっても VBNET でこの方法で作業しようとするのは非常に難しいかもしれません。しっかりと確認するのに十分な自信がありません。

お役に立てれば!

于 2010-02-23T16:18:31.260 に答える