Jak używać wyrażeń lambda w C #

Wyrażenia lambda zostały po raz pierwszy wprowadzone w .NET 3.5, w tym samym czasie, gdy udostępniono Language Integrated Query (LINQ). Wyrażenia lambda są jak anonimowe metody, ale mają znacznie większą elastyczność. Korzystając z wyrażenia lambda, nie musisz określać typu danych wejściowych. Dlatego wyrażenie lambda zapewnia krótszy i czystszy sposób reprezentowania metod anonimowych.

W tym artykule przyjrzymy się, jak możemy używać wyrażeń lambda w C #. Aby pracować z przykładami kodu przedstawionymi w tym artykule, w systemie powinien być zainstalowany program Visual Studio 2019. Jeśli nie masz jeszcze kopii, możesz pobrać program Visual Studio 2019 tutaj. 

Utwórz projekt aplikacji konsoli w programie Visual Studio

Po pierwsze, utwórzmy projekt aplikacji konsoli .NET Core w programie Visual Studio. Zakładając, że w systemie jest zainstalowany program Visual Studio 2019, wykonaj czynności opisane poniżej, aby utworzyć nowy projekt aplikacji konsoli .NET Core w programie Visual Studio.

  1. Uruchom środowisko IDE programu Visual Studio.
  2. Kliknij „Utwórz nowy projekt”.
  3. W oknie „Utwórz nowy projekt” wybierz „Aplikacja konsoli (.NET Core)” z wyświetlonej listy szablonów.
  4. Kliknij Następny. 
  5. W oknie „Konfiguruj nowy projekt” pokazanym obok podaj nazwę i lokalizację nowego projektu.
  6. Kliknij Utwórz.

Wykonanie tych kroków powinno doprowadzić do powstania nowego projektu aplikacji konsoli .NET Core w programie Visual Studio 2019. Będziemy używać tego projektu do pracy z wyrażeniami lambda języka C # w kolejnych sekcjach tego artykułu.

Anatomia wyrażenia lambda

Zasadniczo wyrażenie lambda to metoda, która nie ma deklaracji. Innymi słowy, wyrażenie lambda to metoda, która nie ma specyfikatora dostępu ani nazwy. Wyrażenie lambda można podzielić na dwie sekcje - lewą i prawą. Lewa część służy do wprowadzania danych, a prawa do pisania wyrażeń.

Oto składnia używania wyrażeń lambda w języku C #.

(Parametry wejściowe) => Wyrażenie lub blok instrukcji

Możesz mieć dwa typy wyrażeń lambda, wyrażenie lambda i wyrażenie lambda. Lambda wyrażenia składa się z danych wejściowych po lewej stronie i wyrażenia po prawej stronie, jak pokazano poniżej.

input => wyrażenie;

Lambda instrukcji składa się z danych wejściowych po lewej stronie i zestawu instrukcji po prawej stronie, jak pokazano poniżej.

input => {instrukcje};

Przykłady wyrażeń lambda w C #

Pisanie wyrażenia lambda jest proste - wystarczy usunąć słowo kluczowe delegate i typ parametru z metody anonimowej. Rozważ następującą anonimową metodę, która używa słowa kluczowego delegate, a także typu parametru.

delegate (Autor a) {return a.IsActive && a.NoOfBooksAuthored> 10; }

Powyższą instrukcję można przekonwertować na wyrażenie lambda, jak pokazano we fragmencie kodu podanym poniżej.

(a) => {a.IsActive && a.NoOfBooksAuthored> 10; }

W powyższej instrukcji ajest parametrem i =>jest operatorem lambda. Poniższe stwierdzenie jest wyrażeniem.

a.IsActive && a.NoOfBooksAuthored> 10;

Oto kolejny przykład wyrażenia lambda, które wyświetla nieparzyste liczby od 1 do 9 w oknie konsoli.

Lista liczb całkowitych = nowa Lista {1, 2, 3, 4, 5, 6, 7, 8, 9};

foreach (int liczba w liczbach całkowitych, gdzie (n => n% 2 == 1) .ToList ())

{

  Console.WriteLine (num);

}

Wyrażenia lambda z parametrami i bez nich

Wyrażenia lambda mogą być bez parametrów lub mieć jeden lub więcej parametrów. Poniższy fragment kodu ilustruje wyrażenie lambda, które nie ma żadnych parametrów.

() => Console.WriteLine ("To jest wyrażenie lambda bez żadnego parametru");

Wyrażenia lambda mogą również mieć jeden lub więcej parametrów. Poniższy fragment kodu ilustruje, jak można przekazać jeden parametr do wyrażenia lambda.

(a, numberOfBooksAuthored) => a.NoOfBooksAuthored> = numberOfBooksAuthored;

Możesz również określić typ parametru w wyrażeniu lambda, jak pokazano we fragmencie kodu podanym poniżej.

(a, int numberOfBooksAuthored) => a.NoOfBooksAuthored> = numberOfBooksAuthored;

Możesz nawet określić wiele instrukcji w wyrażeniu lambda, używając nawiasów klamrowych. Jest to pokazane w poniższym fragmencie kodu. 

(a, 10) =>

{

   Console.WriteLine ("To jest przykład wyrażenia lambda

                      z wieloma instrukcjami ”);

   return a.NoOfBooksAuthored> = 10;

}

Lambdy instrukcji w języku C #

Lambda instrukcji używa składni identycznej z wyrażeniami lambda. Różnica polega na tym, że zamiast wyrażenia po prawej stronie operatora, wyrażenie lambda zawiera blok kodu zawierający jedną lub więcej instrukcji.

Poniższy fragment kodu ilustruje, w jaki sposób można wykorzystać wyrażenie lambda do wyświetlenia parzystych liczb od 1 do 9 w oknie konsoli.

int [] integers = new [] {1, 2, 3, 4, 5, 6, 7, 8, 9};

foreach (int i w liczbach całkowitych, gdzie (x =>

{

   jeśli (x% 2 == 0)

         powrót prawda;

    return false;

 }

 ))

Console.WriteLine (i);

Wyrażenia lambda to świetna funkcja w .NET i .NET Core, która zapewnia krótszy sposób reprezentowania metod anonimowych. Wyrażenia lambda mogą mieć zero parametrów lub jeden lub więcej. Możesz nawet przypisać wyrażenia lambda do delegatów Func, Action lub Predicate. W przyszłym artykule tutaj omówimy te i inne cechy wyrażeń lambda. Zbadamy również, jak możemy pracować z wyrażeniami lambda i LINQ, a także z lambdami asynchronicznymi.

Jak zrobić więcej w C #:

  • Kiedy używać klasy abstrakcyjnej, a kiedy interfejsu w języku C #
  • Jak pracować z AutoMapper w C #
  • Jak używać wyrażeń lambda w C #
  • Jak pracować z delegatami Action, Func i Predicate w C #
  • Jak pracować z delegatami w C #
  • Jak zaimplementować prosty rejestrator w C #
  • Jak pracować z atrybutami w C #
  • Jak pracować z log4net w C #
  • Jak zaimplementować wzorzec projektu repozytorium w C #
  • Jak pracować z odbiciem w C #
  • Jak pracować z Filesystemwatcher w C #
  • Jak wykonać leniwą inicjalizację w C #
  • Jak pracować z MSMQ w C #
  • Jak pracować z metodami rozszerzającymi w C #
  • Jak nam wyrażenia lambda w C #
  • Kiedy używać słowa kluczowego volatile w języku C #
  • Jak używać słowa kluczowego yield w języku C #
  • Jak zaimplementować polimorfizm w C #
  • Jak zbudować własny harmonogram zadań w C #
  • Jak pracować z RabbitMQ w C #
  • Jak pracować z krotką w C #
  • Eksplorowanie metod wirtualnych i abstrakcyjnych w C #