Udostępnij przez


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

Token => jest obsługiwany w dwóch formach: jako operator lambda i jako separator nazwy członka oraz implementacji członka w definicji ciała wyrażenia.

Dokumentacja języka C# zawiera ostatnio wydaną wersję języka C#. Zawiera również początkową dokumentację dla funkcjonalności w publicznych wersjach testowych nadchodzącego wydania języka.

Dokumentacja identyfikuje dowolną funkcję po raz pierwszy wprowadzoną w ostatnich trzech wersjach języka lub w bieżącej publicznej wersji zapoznawczej.

Wskazówka

Aby dowiedzieć się, kiedy funkcja została po raz pierwszy wprowadzona w języku C#, zapoznaj się z artykułem dotyczącym historii wersji języka C#.

Operator lambda

W wyrażeniach lambda operator => lambda oddziela parametry wejściowe po lewej stronie od ciała wyrażenia 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 wywnioskuje 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 określić typ 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 używa następującej składni ogólnej:

member => expression;

Jest expression to prawidłowe wyrażenie. Typ zwracany expression musi być możliwy do niejawnej konwersji na typ zwracany elementu członkowskiego. Jeśli członek:

  • Ma typ zwracany void lub
  • Jest:
    • Konstruktor
    • Finalizator
    • Akcesor właściwości lub indeksatora set

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

Poniższy przykład pokazuje definicję korpusu wyrażenia dla metody Person.ToString.

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 funkcjispecyfikacji języka C#.

Zobacz także