Passer au contenu du pied de page
.NET AIDE

C# Lambda Expressions (Comment ça fonctionne pour les développeurs)

Dans le domaine de la programmation C#, les expressions lambda se démarquent comme l'une des fonctionnalités les plus puissantes. Ces constructions concises et expressives permettent aux développeurs d'écrire du code compact mais robuste, améliorant ainsi la lisibilité, la maintenabilité et l'efficacité globale.

Dans cet article, nous allons plonger profondément dans les expressions lambda C#, en explorant leur syntaxe, cas d'utilisation, avantages et techniques avancées. We will also be exploring how IronPDF's capabilities from Iron Software can generate a PDF document on the fly in C# applications.

Comprendre les Expressions Lambda

Les expressions lambda, introduites dans C# 3.0, offrent un moyen succinct de définir des fonctions anonymes ou des délégués. Ce sont essentiellement des fonctions anonymes en ligne qui peuvent être utilisées partout où un type délégué est attendu.

La syntaxe d'une expression lambda est :

(parameters) => expression // lambda expression syntax
(parameters) => expression // lambda expression syntax
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'(parameters) => expression ' lambda expression syntax
$vbLabelText   $csharpLabel

Exemple :

x => x * x // lambda expression to square a number
x => x * x // lambda expression to square a number
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'x => x * x ' lambda expression to square a number
$vbLabelText   $csharpLabel

Ici, parameters sont les paramètres d'entrée de l'expression lambda, et expression est l'instruction ou le bloc d'instructions à exécuter. Le common language runtime de .NET crée une fonction anonyme pour chaque expression lambda au moment de la compilation.

Utilisation de base

Regardons un exemple d'expression lambda où nous avons une liste d'entiers, et nous voulons filtrer les nombres pairs.

Nous pouvons y parvenir en utilisant la méthode List<T>.FindAll avec une expression lambda :

List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
List<int> evenNumbers = numbers.FindAll(x => x % 2 == 0);
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
List<int> evenNumbers = numbers.FindAll(x => x % 2 == 0);
Dim numbers As New List(Of Integer) From {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
Dim evenNumbers As List(Of Integer) = numbers.FindAll(Function(x) x Mod 2 = 0)
$vbLabelText   $csharpLabel

Dans l'exemple ci-dessus, x => x % 2 == 0 est une expression lambda qui prend un entier x en tant que paramètre d'entrée et retourne true si x est pair, et false sinon. L'expression de corps lambda est exécutée sur chaque élément de la liste.

Cas d'utilisation

L'utilisation d'une expression Lambda dans la programmation d'applications modernes trouve une variété de cas d'utilisation, y compris :

  1. Requêtes LINQ : Les expressions lambda sont largement utilisées dans LINQ (Language Integrated Query) pour effectuer des opérations de filtrage, de projection, de tri et de regroupement sur des collections de données.
  2. Gestion des événements : Lors du travail avec des événements et des délégués, les expressions lambda fournissent un moyen concis de définir des gestionnaires d'événements en ligne.
  3. Programmation asynchrone : Dans les modèles de programmation asynchrone comme Task.Run, les expressions lambda peuvent être utilisées pour définir l'opération asynchrone à exécuter.
  4. Programmation fonctionnelle : Les expressions lambda prennent en charge les paradigmes de programmation fonctionnelle, permettant des opérations telles que map, filter et reduce sur des collections.

Types d'expressions Lambda

Expressions Lambdas

Les expressions lambda avec => sont appelées expressions lambdas. Elles prennent le format :

x => x * x // expression to square a number
x => x * x // expression to square a number
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'x => x * x ' expression to square a number
$vbLabelText   $csharpLabel

Dans l'exemple ci-dessus, nous créons un carré d'un nombre. Dans les expressions lambdas, le corps peut inclure des appels de méthode. Cependant, lors de la génération d'arbres d'expressions destinés à être évalués en dehors du Common Language Runtime .NET (CLR), comme dans SQL Server, il est conseillé d'éviter tout appel de méthode dans les expressions lambda.

Ceci est dû au fait que les méthodes peuvent manquer de signification en dehors du contexte CLR. Il est donc crucial de prendre en compte l'environnement cible lors de la construction d'un arbre d'expression pour assurer une compatibilité et une interprétation significative.

Statements Lambdas

Les expressions lambda statements permettent plusieurs instructions et offrent des opérations plus complexes :

Func<int, int> mySquareDelegate = (x) =>
{
    return x * x;
};

Console.WriteLine(mySquareDelegate(4)); // Output: 16
Func<int, int> mySquareDelegate = (x) =>
{
    return x * x;
};

Console.WriteLine(mySquareDelegate(4)); // Output: 16
Dim mySquareDelegate As Func(Of Integer, Integer) = Function(x)
	Return x * x
End Function

Console.WriteLine(mySquareDelegate(4)) ' Output: 16
$vbLabelText   $csharpLabel

Dans ce code, un délégué est déclaré qui opère sur des entiers et renvoie leur carré. Le corps du lambda peut englober plusieurs instructions à l'intérieur d'un bloc {}.

Techniques Avancées

Capturer des Variables

Les expressions lambda peuvent capturer des variables de l'environnement englobant. Cette fonctionnalité, connue sous le nom de capture de variable ou fermeture, permet aux expressions lambda d'accéder et d'utiliser des variables déclarées en dehors de leur corps :

int factor = 2;
Func<int, int> multiplier = x => x * factor;
int factor = 2;
Func<int, int> multiplier = x => x * factor;
Dim factor As Integer = 2
Dim multiplier As Func(Of Integer, Integer) = Function(x) x * factor
$vbLabelText   $csharpLabel

Dans cet exemple, l'expression lambda x => x * factor capture la variable factor de l'environnement englobant.

Paramètres et Instructions Multiples

Les expressions lambda peuvent avoir plus d'un paramètre et exécuter plusieurs instructions encloses dans un bloc :

Func<int, int, int> add = (a, b) =>
{
    int result = a + b;
    Console.WriteLine($"The sum of {a} and {b} is {result}");
    return result;
};
Func<int, int, int> add = (a, b) =>
{
    int result = a + b;
    Console.WriteLine($"The sum of {a} and {b} is {result}");
    return result;
};
Dim add As Func(Of Integer, Integer, Integer) = Function(a, b)
	Dim result As Integer = a + b
	Console.WriteLine($"The sum of {a} and {b} is {result}")
	Return result
End Function
$vbLabelText   $csharpLabel

IronPDF : Une bibliothèque PDF d'Iron Software

Explore IronPDF as a versatile and high-performing PDF generation and parsing library from Iron Software qui peut être utilisée pour générer des documents PDF.

IronPDF peut être installé depuis le gestionnaire de packages NuGet avec la commande ci-dessous :

Install-Package IronPdf

Ou installé depuis Visual Studio comme indiqué ci-dessous :

Expressions Lambda C# (Comment ça fonctionne pour les développeurs) : Figure 1 - Installation d'IronPDF avec le gestionnaire de packages NuGet

Passons maintenant à la génération de PDF en utilisant une expression lambda :

using IronPdf; // Import the IronPdf library
using System;
using System.Collections.Generic;
using System.Linq;

namespace IronPatterns
{
    class Program
    {
        static void Main()
        {
            Console.WriteLine("-----------Iron Software-------------");
            var renderer = new ChromePdfRenderer(); // Initialize the PDF renderer
            var content = "<h1> Iron Software is Awesome </h1> Made with IronPDF!";
            content += "<h2>Demo C# lambda expressions</h2>";
            content += $"<p>Generating Square of list of numbers x=>x*x</p>";

            List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            // Use Select to create a list of squared numbers
            List<int> squares = numbers.Select(x => x * x).ToList();

            content += $"<p>Numbers list: {string.Join(",", numbers)}</p>";
            content += $"<p>Squares: {string.Join(",", squares)}</p>";

            var pdf = renderer.RenderHtmlAsPdf(content); // Render the HTML as a PDF
            pdf.SaveAs("output.pdf"); // Save the PDF document
        }
    }
}
using IronPdf; // Import the IronPdf library
using System;
using System.Collections.Generic;
using System.Linq;

namespace IronPatterns
{
    class Program
    {
        static void Main()
        {
            Console.WriteLine("-----------Iron Software-------------");
            var renderer = new ChromePdfRenderer(); // Initialize the PDF renderer
            var content = "<h1> Iron Software is Awesome </h1> Made with IronPDF!";
            content += "<h2>Demo C# lambda expressions</h2>";
            content += $"<p>Generating Square of list of numbers x=>x*x</p>";

            List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            // Use Select to create a list of squared numbers
            List<int> squares = numbers.Select(x => x * x).ToList();

            content += $"<p>Numbers list: {string.Join(",", numbers)}</p>";
            content += $"<p>Squares: {string.Join(",", squares)}</p>";

            var pdf = renderer.RenderHtmlAsPdf(content); // Render the HTML as a PDF
            pdf.SaveAs("output.pdf"); // Save the PDF document
        }
    }
}
Imports IronPdf ' Import the IronPdf library
Imports System
Imports System.Collections.Generic
Imports System.Linq

Namespace IronPatterns
	Friend Class Program
		Shared Sub Main()
			Console.WriteLine("-----------Iron Software-------------")
			Dim renderer = New ChromePdfRenderer() ' Initialize the PDF renderer
			Dim content = "<h1> Iron Software is Awesome </h1> Made with IronPDF!"
			content &= "<h2>Demo C# lambda expressions</h2>"
			content &= $"<p>Generating Square of list of numbers x=>x*x</p>"

			Dim numbers As New List(Of Integer) From {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
			' Use Select to create a list of squared numbers
			Dim squares As List(Of Integer) = numbers.Select(Function(x) x * x).ToList()

			content &= $"<p>Numbers list: {String.Join(",", numbers)}</p>"
			content &= $"<p>Squares: {String.Join(",", squares)}</p>"

			Dim pdf = renderer.RenderHtmlAsPdf(content) ' Render the HTML as a PDF
			pdf.SaveAs("output.pdf") ' Save the PDF document
		End Sub
	End Class
End Namespace
$vbLabelText   $csharpLabel

Sortie

Expressions Lambda C# (Comment ça fonctionne pour les développeurs) : Figure 2

Licence d'essai

Le code IronPDF ne peut fonctionner qu'avec une licence d'essai obtenue depuis la page de licence d'essai IronPDF. Fournissez un identifiant Email dans la fenêtre contextuelle pour générer une clé de licence et envoyez cette clé à votre email.

"IronPDF.LicenseKey": "<YourKey>"

Placez la clé de licence dans le fichier AppSettings.json.

Conclusion

Les expressions lambda C# offrent un moyen concis et expressif de définir des fonctions en ligne, rendant le code plus lisible, maintenable et efficace. Elles trouvent des applications dans divers domaines, y compris les requêtes LINQ, la gestion des événements, la programmation asynchrone et la programmation fonctionnelle.

En maîtrisant les expressions lambda, les développeurs peuvent débloquer de nouvelles dimensions de productivité et d'élégance dans leurs bases de code C#.

Que vous soyez un développeur C# chevronné ou que vous commenciez tout juste votre parcours, comprendre et exploiter la puissance des expressions lambda élèvera sans aucun doute vos compétences en programmation à de nouveaux sommets.

Alors plongez, expérimentez, et embrassez la beauté des expressions lambda dans vos projets C#!

Questions Fréquemment Posées

Comment puis-je utiliser des expressions lambda pour générer des PDF en C# ?

Vous pouvez utiliser des expressions lambda pour simplifier le code lorsque vous travaillez avec IronPDF pour générer des PDF par programmation. Par exemple, vous pouvez utiliser une lambda pour filtrer des données avant de les rendre dans un document PDF en utilisant les méthodes d'IronPDF.

Quelle est l'importance des expressions lambda dans les requêtes LINQ ?

Les expressions lambda jouent un rôle crucial dans les requêtes LINQ en fournissant un moyen concis de définir des fonctions pour des opérations telles que le filtrage, le tri et la projection de données. Cela améliore la lisibilité et l'efficacité des requêtes LINQ en C#.

Comment les expressions lambda améliorent-elles la programmation asynchrone en C# ?

Les expressions lambda simplifient la programmation asynchrone en permettant aux développeurs de définir des fonctions de rappel inline. Cela est particulièrement utile dans la programmation événementielle et lors du traitement des tâches asynchrones, rendant le code plus lisible et maintenable.

Les expressions lambda peuvent-elles être utilisées dans la gestion des événements dans les applications C# ?

Oui, les expressions lambda sont couramment utilisées dans la gestion des événements car elles permettent une définition concise des gestionnaires d'événements. Cela peut rendre le code plus propre et plus intuitif, notamment lors de l'utilisation de bibliothèques comme IronPDF pour les événements de documents.

Quelles sont les différences entre les lambdas d'expression et les lambdas de déclaration en C# ?

Les lambdas d'expression consistent en une seule expression et utilisent la syntaxe x => x * x, tandis que les lambdas de déclaration peuvent contenir plusieurs instructions dans un bloc, utilisant la syntaxe (x) => { return x * x; }. Cette distinction permet aux développeurs de choisir en fonction de la complexité de la fonction.

Comment la capture de variables améliore-t-elle la fonctionnalité des expressions lambda ?

Les expressions lambda peuvent capturer des variables de leur portée englobante, une fonctionnalité connue sous le nom de capture de variable ou fermeture. Cela leur permet d'accéder et d'utiliser des variables externes, permettant des définitions de fonctions plus dynamiques et flexibles en C#.

Quelles sont les techniques avancées pour utiliser des expressions lambda avec plusieurs paramètres ?

Les expressions lambda peuvent gérer plusieurs paramètres en les séparant par des virgules entre parenthèses. Cette flexibilité permet aux développeurs de définir des fonctions complexes inline, pouvant être utilisées dans des scénarios de programmation avancés, tels que la génération de documents PDF complexes avec IronPDF.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite