4 Stimmen

Unterstützen VB.NET und Visual Studio 2010 eine mehrzeilige anonyme Methode?

Ich habe festgestellt, dass diese Antwort vor dem tatsächlichen Erscheinen von VS2010 gestellt und beantwortet wurde.

Sie sagen, dass

VB9 hat nur anonyme Funktionen in einer Zeile. Wir fügen volle Anweisungen und mehrzeilige Lambdas in VB10 hinzu.

Aber ich habe versucht, diesen Code hinzuzufügen

 Dim test2 = Function(t1 As T, t2 As T) (
 Dim val1 As IComparable = DirectCast(prop.GetValue(t1), IComparable)
 Dim val2 As IComparable = DirectCast(prop.GetValue(t2), IComparable)
 Return val1.CompareTo(val2)
 )

zu einem .NET Framework 4.0 Projekt in Visual Studio 2010 und es kompiliert nicht.

Wissen Sie, ob dieses Feature wirklich implementiert ist und was ich falsch mache?

12voto

diceguyd30 Punkte 2697

Ich glaube, Ihnen fehlt nur Ihre 'End Function'-Zeile. Versuchen Sie es mit:

 Dim test2 = (Function(t1 As T, t2 As T)
 Dim val1 As IComparable = DirectCast(prop.GetValue(t1), IComparable)
 Dim val2 As IComparable = DirectCast(prop.GetValue(t2), IComparable)
 Return val1.CompareTo(val2)
 End Function)

3voto

Heinzi Punkte 157917

Sie fehlen End Function und Sie versuchen, den Funktionskörper in Klammern zu schließen, was falsch ist. Dies sollte funktionieren:

Dim test2 = Function(t1 As T, t2 As T)
    Dim val1 As IComparable = DirectCast(prop.GetValue(t1), IComparable)
    Dim val2 As IComparable = DirectCast(prop.GetValue(t2), IComparable)
    Return val1.CompareTo(val2)
End Function

Diese Funktion ist hier dokumentiert:

2voto

Sam Punkte 443

Hier ist etwas, das Sie nützlich finden könnten. Beachten Sie, wie die deklarierte Methode sofort aufgerufen wird.

Dim food = New With {
    .ID = 1,
    .Name = "Karotte",
    .Type = (
        Funktion(name As String)
            If String.IsNullOrEmpty(name) Then Return String.Empty

            Select Case name.ToLower()
                Case "apfel", "tomate": Return "Obst"
                Case "kartoffel": Return "Gemüse"
            End Select

            Return "Fleisch"
        End Function
    )(.Name)
}
Dim typ = food.Type

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X