Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Thomas Lebrun

Tout sur WPF, LINQ, C# et .NET en général !

Actualités

[C#] Comprendre les expressions lambda de C# 3

Avec l'arrivée de C# 3, on voit ce langage s'enrichir de nouvelles fonctionnalités Smile [:)]

L'une d'entre elles s'appelle les expressions lambda: derrière ce terme un peu barbare se cache un concept puissant que je vais tâcher de vous résumer en quelques lignes.

Avant de rentrer dans le vif du sujet, il faut se rappeler d'une des fonctionnalités offerte par C# 2: les méthodes anonymes.

Ces méthodes permettaient aux développeurs d’écrire des blocs de code en ligne, lorsque des délégués étaient nécessaires.

Par exemple, on pouvait tout à fait écrire quelque chose comme ceci :

                                                                                                                              

List<int> list = new List<int>(new int [] { -1, 2, -5, 45, 5 }); 

List<int>positiveNumbers = list.FindAll(delegate(int i) { return i > 0;});

 

Les expressions lambdas représente en fait un moyen plus simple d’écrire les expressions anonymes.

Une expression lambda est composée de trois parties :

  • Une liste de paramètre

  • Le signe =>

  • Une expression

Voici un exemple d’expression lambda :

 

(int i) => i % 2 == 0

 

Au niveau de la liste de paramètres, il y a deux choses à savoir :

  • Les paramètres peuvent être typés explicitement ou implicitement. Dans le second cas, le type est déduit de l’expression qui constitue votre expression.
  • S’il n’y a qu’un seul paramètre typé implicitement, les parenthèses sont facultatives

Voyons un peu comment nous pourrions utiliser cela dans notre code :

 

List<int> list = new List<int>(new int [] { -1, 2, -5, 45, 5 }); 

var positiveNumbers = list.FindAll((int i) => i > 0); 

foreach(int positiveNumber in positiveNumbers)

{

       Console.WriteLine(positiveNumber);

}

 

Le code de cette application, utilisant une expression lambda, fournit le même résultat que la version utilisant les méthodes anonymes : il est simplement plus clair à lire.

Bien entendu, rien ne vous empêche d’utiliser plusieurs paramètres dans votre expression lambda.

Commencez par créer une petite méthode d’extension que nous utiliserons plus tard. N’oubliez qu’une méthode d’extension est une méthode statiques. Pour bien faire, créer cette méthode dans une nouvelle classe, afin d’organiser au mieux votre code.

 

public static class FilterClass

{ 

      public delegate bool KeyValueFilter<K, V>(K key, V value); 

       public static Dictionary<K, V> FilterBy<K, V>(this Dictionary<K, V>items, KeyValueFilter<K, V> filter)

       {

             var result = new Dictionary<K, V>(); 

             foreach (KeyValuePair<K, V> element in items)

             {

                    if (filter(element.Key, element.Value))

                           result.Add(element.Key, element.Value);

             }

            

             return result;

       }

}

 

Ensuite, il ne vous reste plus qu’à construire votre expression lambda comme précédemment mais en modifiant votre expression pour travailler avec plusieurs paramètres :

 

// Expression lambda avec plusieurs paramètres

var listLanguages = new Dictionary<string, int>();

listLanguages.Add("C#", 5);

listLanguages.Add("VB", 3);

listLanguages.Add("Java", -5);      

var bestLanguages = listLanguages.FilterBy((string name, int score) => name.Length == 2 && score > 0); 

foreach(KeyValuePair<string, int>language in bestLanguages)

{

       Console.WriteLine(language.Key);

}

 

Ici, on travaille bien sur une expression lambda qui possède plusieurs paramètres.

 

 

Et voila Smile [:)]

J'espère que vous avez donc une meilleure vision de ce que sont les expressions lambda et que dès lors où vous ferez du C# 3, vous n'hésiterez pas à les utilisez.

 

La suite au prochain épisode (ou dans mon prochain article..... Wink [;)] )

 

 

A+

 

 

PS: Faut vraiment que je trouve un moyen de faire un formatage correct dans mes posts moi...

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: dimanche 18 juin 2006 22:01 par Thomas LEBRUN
Classé sous : ,

Commentaires

minsou a dit :

pour les commentaires c'est faciles :
http://blogs.developpeur.org/coq/archive/2006/06/12/21535.aspx

y'en a qui ne sont apparemment pas abonnés au flux RSS de blogs.developpeur.org ;-)

Enjoy
# juin 19, 2006 10:19

romain verdier a dit :

L'autre caractéristique des expressions lambda, et probablement la plus importante, est que le compilateur peut en déduire un arbre syntaxique (type Expression dans .NET 3.5)

Par exemple, l'expression lambda :

person =&gt; !string.IsNullOrEmpty(person.Name)

Peut être interprétée comme une méthode anonyme ayant la signature suivante :

bool Predicate(Person person)

Mais aussi comme une expression du type :

Expression

<Func><Person, bool="">&gt;

# septembre 30, 2008 15:25
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01

- SharePoint Online: Script PowerShell pour supprimer une colonne dans tous les sites d’une collection par Blog Technique de Romelard Fabrice le 11-27-2018, 18:01

- Office 365: Script PowerShell pour supprimer des comptes utilisateur de collections de sites SharePoint Online par Blog Technique de Romelard Fabrice le 11-19-2018, 16:47

- Retrouvez-moi aux Microsoft experiences18 ! par Blog de Jérémy Jeanson le 11-06-2018, 22:25

- Office 365: Script PowerShell pour extraire les Teams associés à un utilisateur spécifié par Blog Technique de Romelard Fabrice le 11-06-2018, 13:37