Operator wyrażenia lambda (=>) definiuje wyrażenie lambda

Token => jest obsługiwany w dwóch formach: jako operator lambda i jako separator nazwy elementu członkowskiego i implementacji składowej w definicji treści wyrażenia.

Operator lambda

W wyrażeniach lambda operator => lambda oddziela parametry wejściowe po lewej stronie od treści lambda po prawej stronie.

W poniższym przykładzie użyto funkcji LINQ ze składnią metody, aby zademonstrować użycie wyrażeń 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

Parametry wejściowe wyrażenia lambda są silnie typizowane w czasie kompilacji. Gdy kompilator może wywnioskować typy parametrów wejściowych, na przykład w poprzednim przykładzie, można pominąć deklaracje typów. Jeśli musisz określić typ parametrów wejściowych, musisz to zrobić dla każdego parametru, jak pokazano w poniższym przykładzie:

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

W poniższym przykładzie pokazano, jak zdefiniować wyrażenie lambda bez parametrów wejściowych:

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

Aby uzyskać więcej informacji, zobacz Wyrażenia lambda.

Definicja treści wyrażenia

Definicja treści wyrażenia ma następującą ogólną składnię:

member => expression;

gdzie expression jest prawidłowym wyrażeniem. Zwracany expression typ musi być niejawnie konwertowany na typ zwracany elementu członkowskiego. Jeśli element członkowski:

  • Ma typ zwracany void lub
  • Jest:
    • Konstruktor
    • Finalizatorów
    • Dostęp do właściwości lub indeksatora set

expressionmusi być wyrażeniem instrukcji. Ponieważ wynik wyrażenia jest odrzucany, zwracany typ tego wyrażenia może być dowolnym typem.

W poniższym przykładzie przedstawiono definicję Person.ToString treści wyrażenia dla metody:

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

Jest to skrócona wersja następującej definicji metody:

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

Definicje treści wyrażeń można tworzyć dla metod, operatorów, właściwości tylko do odczytu, konstruktorów, finalizatorów oraz metod dostępu do właściwości i indeksatora. Aby uzyskać więcej informacji, zobacz Expression-bodied members (Składowe wyrażeń).

Przeciążenie operatora

=> Nie można przeciążyć operatora.

specyfikacja języka C#

Aby uzyskać więcej informacji na temat operatora lambda, zobacz sekcję Anonimowe wyrażenia funkcji specyfikacji języka C#.

Zobacz też