Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# Lambda expressions: Why should I use them?

Tags:

c#

lambda

c#-3.0

I have quickly read over the Microsoft Lambda Expression documentation.

This kind of example has helped me to understand better, though:

delegate int del(int i); del myDelegate = x => x * x; int j = myDelegate(5); //j = 25 

Still, I don't understand why it's such an innovation. It's just a method that dies when the "method variable" ends, right? Why should I use this instead of a real method?

like image 906
Patrick Desjardins Avatar asked Oct 03 '08 15:10

Patrick Desjardins


People also ask

Bahasa C digunakan untuk apa?

Meskipun C dibuat untuk memprogram sistem dan jaringan komputer namun bahasa ini juga sering digunakan dalam mengembangkan software aplikasi. C juga banyak dipakai oleh berbagai jenis platform sistem operasi dan arsitektur komputer, bahkan terdapat beberepa compiler yang sangat populer telah tersedia.

Apa yang dimaksud dengan huruf C?

C adalah huruf ketiga dalam alfabet Latin. Dalam bahasa Indonesia, huruf ini disebut ce (dibaca [tʃe]).


2 Answers

Lambda expressions are a simpler syntax for anonymous delegates and can be used everywhere an anonymous delegate can be used. However, the opposite is not true; lambda expressions can be converted to expression trees which allows for a lot of the magic like LINQ to SQL.

The following is an example of a LINQ to Objects expression using anonymous delegates then lambda expressions to show how much easier on the eye they are:

// anonymous delegate var evens = Enumerable                 .Range(1, 100)                 .Where(delegate(int x) { return (x % 2) == 0; })                 .ToList();  // lambda expression var evens = Enumerable                 .Range(1, 100)                 .Where(x => (x % 2) == 0)                 .ToList(); 

Lambda expressions and anonymous delegates have an advantage over writing a separate function: they implement closures which can allow you to pass local state to the function without adding parameters to the function or creating one-time-use objects.

Expression trees are a very powerful new feature of C# 3.0 that allow an API to look at the structure of an expression instead of just getting a reference to a method that can be executed. An API just has to make a delegate parameter into an Expression<T> parameter and the compiler will generate an expression tree from a lambda instead of an anonymous delegate:

void Example(Predicate<int> aDelegate); 

called like:

Example(x => x > 5); 

becomes:

void Example(Expression<Predicate<int>> expressionTree); 

The latter will get passed a representation of the abstract syntax tree that describes the expression x > 5. LINQ to SQL relies on this behavior to be able to turn C# expressions in to the SQL expressions desired for filtering / ordering / etc. on the server side.

like image 66
Neil Williams Avatar answered Sep 17 '22 15:09

Neil Williams


Anonymous functions and expressions are useful for one-off methods that don't benefit from the extra work required to create a full method.

Consider this example:

 List<string> people = new List<string> { "name1", "name2", "joe", "another name", "etc" };  string person = people.Find(person => person.Contains("Joe")); 

versus

 public string FindPerson(string nameContains, List<string> persons)  {      foreach (string person in persons)          if (person.Contains(nameContains))              return person;      return null;  } 

These are functionally equivalent.

like image 30
Joseph Daigle Avatar answered Sep 17 '22 15:09

Joseph Daigle