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
expression
musi 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#.