Funktionsausdruck (Visual Basic)

Deklariert die Parameter und den Code, die einen Funktionslambdaausdruck definieren.

Syntax

Function ( [ parameterlist ] ) expression
- or -
Function ( [ parameterlist ] )
  [ statements ]
End Function

Bestandteile

Begriff Definition
parameterlist Dies ist optional. Eine Liste der lokalen Variablennamen, die die Parameter dieser Prozedur darstellen. Die Klammern müssen auch dann vorhanden sein, wenn die Liste leer ist. Siehe Parameterliste (Visual Basic).
expression Erforderlich. Ein einzelner Ausdruck. Der Typ des Ausdrucks ist der Rückgabetyp der Funktion.
statements Erforderlich. Eine Liste von Anweisungen, die einen Wert mithilfe der Return-Anweisung zurückgeben. (Siehe Return-Anweisung.) Der Typ des zurückgegebenen Werts ist der Rückgabetyp der Funktion.

Bemerkungen

Ein Lambdaausdruck ist eine Funktion ohne Namen, die einen Wert berechnet und zurückgibt. Sie können einen Lambdaausdruck überall dort verwenden, wo Sie einen Delegattyp verwenden können, außer als Argument für RemoveHandler. Weitere Informationen zu Delegaten und zur Verwendung von Lambdaausdrücken mit Delegaten finden Sie unter Delegate-Anweisung und Gelockerte Delegatenkonvertierung.

Lambdaausdruckssyntax

Die Syntax eines Lambdaausdrucks ähnelt der Syntax einer Standardfunktion. Es gibt die folgenden Unterschiede:

  • Dieser Ausdruck besitzt keinen Namen.

  • Lambdaausdrücke können keine Modifizierer wie Overloads oder Overrides aufweisen.

  • Lambdaausdrücke verwenden keine As-Klausel, um den Rückgabetyp der Funktion festzulegen. Stattdessen wird der Typ aus dem Wert abgeleitet, in den der Text eines einzeiligen Lambdaausdrucks ausgewertet wird, oder vom Rückgabewert eines mehrzeiligen Lambdaausdrucks. Wenn der Text eines einzeiligen Lambdaausdrucks beispielsweise Where cust.City = "London" lautet, ist der Rückgabetyp Boolean.

  • Der Textkörper eines einzeiligen Lambdaausdrucks muss ein Ausdruck und keine Anweisung sein. Der Text kann aus einem Aufruf einer Funktionsprozedur bestehen, aber nicht aus einem Aufruf einer Unterprozedur.

  • Entweder müssen alle Parameter über angegebene Datentypen verfügen, oder alle Datentypen müssen abgeleitet werden.

  • Optionale und Paramarray-Parameter sind nicht zulässig.

  • Generische Parameter sind nicht zulässig.

Beispiel 1

Die folgenden Beispiele zeigen zwei Möglichkeiten zum Erstellen einfacher Lambdaausdrücke. Das erste Beispiel verwendet Dim, um einen Namen für die Funktion anzugeben. Um die Funktion aufzurufen, übergeben Sie einen Wert für den Parameter.

Dim add1 = Function(num As Integer) num + 1
' The following line prints 6.
Console.WriteLine(add1(5))

Beispiel 2

Alternativ können Sie die Funktion deklarieren und gleichzeitig ausführen.

Console.WriteLine((Function(num As Integer) num + 1)(5))

Beispiel 3

Im Folgenden finden Sie ein Beispiel für einen Lambdaausdruck, der sein Argument inkrementiert und den Wert zurückgibt. Das Beispiel zeigt die Syntax des einzeiligen und mehrzeiligen Lambdaausdrucks für eine Funktion. Weitere Beispiele finden Sie unter Lambdaausdrücke.

Dim increment1 = Function(x) x + 1
Dim increment2 = Function(x)
                     Return x + 2
                 End Function

' Write the value 2.
Console.WriteLine(increment1(1))

' Write the value 4.
Console.WriteLine(increment2(2))

Beispiel 4

Lambdaausdrücke liegen vielen der Abfrageoperatoren in LINQ (Language-Integrated Query) zugrunde und können explizit in methodenbasierten Abfragen verwendet werden. Das folgende Beispiel zeigt eine typische LINQ-Abfrage, gefolgt von der Übersetzung der Abfrage in das Methodenformat.

Dim londonCusts = From cust In db.Customers
                       Where cust.City = "London"
                       Select cust

' This query is compiled to the following code:
Dim londonCusts = db.Customers.
                  Where(Function(cust) cust.City = "London").
                  Select(Function(cust) cust)

Weitere Informationen zu Abfragemethoden finden Sie unter Abfragen. Weitere Informationen zu Standardabfrageoperatoren finden Sie unter Übersicht über Standardabfrageoperatoren.

Siehe auch