2017-11-21 4 views
0

Ich versuche, etwas in VB.NET basierend auf einer C# -Lösung zu schreiben, die ich habe. In der C# Lösung rufe ich die Funktion mit:VB.NET Passing-Funktion zu Aktionsparameter

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

Und die aufgerufene Methode ist:

public static Task somefuntion(Action<string> callback); 

in VB.NET habe ich

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

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

Alle Ideen, was ich falsch mache ? statt Funktion

+0

Ein bisschen off-topic, aber vb.net Lambda-Ausdrücke sicher hässlich ist ... So froh, dass ich zog weg von ihm zu C#. –

+0

'ByRef' ist wahrscheinlich nicht das, was Sie wollen, es sei denn,' somefunction' könnte dem Aufrufer einen eigenen Callback zurückgeben (was hier anscheinend nicht geschieht). 'ByVal' ist wahrscheinlich, was Sie wollen. Die 'ByRef' /' ByVal'-Unterscheidung ist bei Referenztypen etwas verwirrend, wo sie darauf hinweist, ob die als Argument übergebene Hostvariable auf ein anderes Objekt referenziert werden könnte, anstatt ob eine Kopie des Objekts übergeben wird. – Craig

Antwort

1

ein. in Lambdaänderung Function(s) zu Sub(s):

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

b. fügen Sie das Function Schlüsselwort zur somefunction Methodensignatur:

Public Shared Function somefunction(ByRef callback As Action(Of String)) As Task 
0

Überprüfen Sie die offizielle doc

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

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