2017-11-21 22 views
0

私はVB.NETに、私が持っているC#ソリューションに基づいて何かを書こうとしています。 C#ソリューションで、私はとの関数を呼び出す:VB.NET関数をActionパラメーターに渡す

somefunction(s => Console.WriteLine(s)).Wait(); 

と呼ばれる方法がある:

VB.NETで
public static Task somefuntion(Action<string> callback); 

私は私が間違っているの何

somefunction(Function(s) Console.WriteLine(s)).Wait() 

Public Shared somefunction(ByRef callback As Action(Of string)) As Task 

任意のアイデアを持っています? somefunction(Sub(s) Console.WriteLine(s)).Wait()

+0

ビットがオフトピックが、vb.netラムダ式は確かに醜いです...私は、C#に離れてから移動ので嬉しいです。 –

+0

'ByRef'はおそらく' somefunction'が呼び出し側に独自のコールバックを返さない限り、あなたが望むものではありません(ここでは起こっていないようです)。 ByValはおそらくあなたが望むものです。 'ByRef'と' ByVal'の区別は、オブジェクトのコピーが渡されるかどうかではなく、引数として渡されたホスト変数が別のオブジェクトに再指されるかどうかを参照する参照型とやや混乱します。 – Craig

答えて

0

ではなく、関数の公式ドキュメント

https://msdn.microsoft.com/en-us/library/018hxwa8(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1

Module TestAction1 
    Public Sub Main 
     Dim messageTarget As Action(Of String) 

     If Environment.GetCommandLineArgs().Length > 1 Then 
     messageTarget = AddressOf ShowWindowsMessage 
     Else 
     messageTarget = AddressOf Console.WriteLine 
     End If 
     messageTarget("Hello, World!") 
    End Sub 

    Private Sub ShowWindowsMessage(message As String) 
     MsgBox(message) 
    End Sub 
End Module 
1

使用サブを確認してください。

somefunction(Sub(s) Console.WriteLine(s)).Wait() 

B:Sub(s)にラムダ変更Function(s)インチsomefunction方法署名にFunctionキーワードを追加します。

Public Shared Function somefunction(ByRef callback As Action(Of String)) As Task 
関連する問題