Condividi tramite


L'operatore lambda expression (=>) definisce un'espressione lambda

Il => token è supportato in due forme: come operatore lambda e come separatore di un nome del membro e dell'implementazione del membro in una definizione del corpo dell'espressione.

Operatore lambda

Nelle espressioni lambda, l'operatore => lambda separa i parametri di input sul lato sinistro dal corpo lambda a destra.

Nell'esempio seguente viene usata la funzionalità LINQ con la sintassi del metodo per illustrare l'utilizzo delle espressioni lambda:

string[] words = { "bot", "apple", "apricot" };
int minimalLength = words
  .Where(w => w.StartsWith("a"))
  .Min(w => w.Length);
Console.WriteLine(minimalLength);   // output: 5

int[] numbers = { 4, 7, 10 };
int product = numbers.Aggregate(1, (interim, next) => interim * next);
Console.WriteLine(product);   // output: 280

I parametri di input di un'espressione lambda sono fortemente tipizzati durante la compilazione. Quando il compilatore può dedurre i tipi di parametri di input, come nell'esempio precedente, è possibile omettere dichiarazioni di tipo. Se è necessario specificare il tipo di parametri di input, è necessario eseguire questa operazione per ogni parametro, come illustrato nell'esempio seguente:

int[] numbers = { 4, 7, 10 };
int product = numbers.Aggregate(1, (int interim, int next) => interim * next);
Console.WriteLine(product);   // output: 280

L'esempio seguente illustra come definire un'espressione lambda senza parametri di input:

Func<string> greet = () => "Hello, World!";
Console.WriteLine(greet());

Per altre informazioni, vedere Espressioni lambda.

Definizione del corpo dell'espressione

Una definizione del corpo dell'espressione ha la sintassi generale seguente:

member => expression;

Dove expression è un'espressione valida. Il tipo restituito di expression deve essere convertibile in modo implicito nel tipo restituito del membro. Se il membro:

  • Ha un void tipo di ritorno o
  • È un:
    • Costruttore
    • Finalizzatore
    • Funzione di accesso della proprietà o dell'indicizzatore set

expression deve essere un'espressione di istruzione. Poiché il risultato dell'espressione viene rimosso, il tipo restituito di tale espressione può essere qualsiasi tipo.

L'esempio seguente mostra una definizione del corpo dell'espressione per un Person.ToString metodo:

public override string ToString() => $"{fname} {lname}".Trim();

Si tratta di una versione abbreviata della definizione del metodo seguente:

public override string ToString()
{
   return $"{fname} {lname}".Trim();
}

È possibile creare definizioni del corpo dell'espressione per metodi, operatori, proprietà di sola lettura, costruttori, finalizzatori e funzioni di accesso alle proprietà e agli indicizzatori. Per altre informazioni, vedere Membri con corpo di espressione.

Sovraccarico degli operatori

L'operatore => non può essere sottoposto a overload.

Specifiche del linguaggio C#

Per altre informazioni sull'operatore lambda, vedere la sezione Espressioni di funzione anonima della specifica del linguaggio C#.

Vedere anche