2009-06-25 8 views
1

Je suis un développeur expérimenté en C# et travaille sur l'application métier depuis 7 ans, j'ai quelques problèmes dans la compréhension de l'utilisation de l'expression lambda dans la programmation.Utilisation de l'expression lambda dans la programmation pratique

Pour autant que je comprends, il est utile en cas de

  1. Travailler avec LINQ (Groupement, Select, Où etc ..)
  2. On peut passer l'expression Lambda à une fonction comme argument, donc il peut être utilisé à la place d'une fonction déléguée ou anonyme ou d'une fonction normale.
  3. Nous pouvons créer une fonction lambda générique qui prend n'importe quelle variable de type de données comme argument et peut renvoyer n'importe quel type de données, par ex.

    MyFirstLambdaFunc((val1,val2) => val1+val2) 
    public R MyFirstLambdaFunc(Func lambdaexpression,T x,T y) 
    { 
        R Result = lambdaexpression(x, y); 
        return Result; 
    } 
    
  4. Le codage peut être compact

Maintenant, la question est:

  1. Y at-il d'autres avantages?
  2. Lorsque nous passons l'expression lambda en tant que fonction, pouvons-nous passer une seule opération de ligne?
  3. Quelqu'un peut-il avoir une étude de cas ou un document d'exemple pratique?

Merci à l'avance

Harish Bhattbhatt

Répondre

2

Pour les arbres non-expression, vous pouvez certainement écrire des expressions lambda multi-ligne. Ce matin je l'ai écrit quelque chose le long des lignes de:

var query = foo.Select(x => { 
       string text = x.Value; 
       int delimitedIndex = text.IndexOf(' '); 
       return int.Parse(text.Substring(0, delimitedIndex); 
      }); 

expressions lambda peuvent être utiles presque partout que vous voulez créer des instances de délégué avec raisonnablement implémentations simples.

Pour fournir un autre exemple, supposons que vous souhaitiez démarrer des threads pour travailler sur chacune des nombreuses valeurs. (Ignorons le fait que nous nous créons beaucoup de discussions - la même technique fonctionne pour threadpools aussi.) Vous pouvez utiliser quelque chose comme:

foreach (string url in urls) 
{ 
    // Slight quirk due to variable capture semantics 
    string urlCopy = url; 
    new Thread(() => FetchUrl(urlCopy)).Start(); 
} 

Faire cela en est ainsi fortement typé normalement difficile - il y a ParameterizedThreadStart , mais ce n'est pas générique, donc ça devient fiddly. C'est assez propre IMO.

+1

Je dirais que les expressions lambda sont un très bon outil de «fermeture». Tu n'es pas d'accord? Parfois, je ne devais écrire qu'une simple fonction qui nécessite de connaître "beaucoup d'état" de l'ancêtre de t, donc cela prendrait beaucoup de paramètres. Les expressions lambda aident dans ces situations ... –

0

Merci Jon,

Votre fonction Multi ligne est très bien reçu

x => { string text = x.Value; int delimitedIndex = text.IndexOf (''); retour int.Parse (text.Substring (0, delimitedIndex);}

si possible pouvez-vous fournir quelques exemples ou situation où l'expression lambda peut être d'une grande aide en place d'autres techniques de programmation ...seulement si possible

Je pense que cela aidera beaucoup de gens parce que connaître les choses techniquement n'est pas suffisant mais où l'utiliser pratiquement et comment cela aidera dans une situation particulière est très important.

+0

Les choses affichées ici sont des réponses. Pour poser une question de suivi, vous pouvez laisser des commentaires (pas des réponses) ou éditer votre question, ou créer une toute nouvelle question. Comme pour les exemples de lambdas, essayez de chercher sur ce site - il y a des milliers d'exemples. –

+0

Sûrement ... comme j'étais nouveau sur le site, je n'étais pas au courant à ce moment-là ... désolé de mon côté – Harryboy

0

Je l'ai utilisé lambdas tout à fait un peu comme gestionnaires d'événements, par exemple:

button.Click += (sender, e) => DoSomething(); 

Je pense que cela crée une syntaxe très propre et parfois la sémantique de fermeture peut être utile pour la gestion des événements.

0

La nouvelle bibliothèque parallèle de tâches de .NET 4 l'utilise intensivement. Par exemple, si vous voulez exécuter un bloc de code en parallèle, vous pouvez écrire:

Parallel.For(1, 10, i => 
{ 
    // do work 
}); 

Cela fonctionne bien mieux que simplement passer une méthode pour cela, à mon avis, comme ceci:

Parallel.For(1, 10, SomeMethodWithIntAsParam); 
Questions connexes