Wriju's BLOG

.NET, Cloud and everything

C# 3.0 : Exploring Lambda Expression

I started playing with Lambda expression after the TechEd demo by Anders Hejlsberg. Couple of nice things I would like to share with you.


 


As there might be many definitions for Lambda expression but to me Lambda Expression is the concise way to write functional implementation for Anonymous Method. This is been used by compiler to translate LINQ to method calls. This also allows us to maintain 100% backward compatibility with any managed version of C#.


 


Lambda function can be created using the Generic delegate Func. Func<A,R> (represents a function taking an argument of type A and returning a value of type R) is the predefined .NET call to a delegate for n number of parameters with any type. Life is easy for us. Func is defined inside System.Linq namespace. So being developer we do not have to bother about the number of variable and there types. We can simply go ahead and create any function using Func.


 


Now if you have an anonymous method for a List of Integers which finds the even numbers from the list.


 


//Generic List of Integers


List<int> arrInt = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };


 


//Using delegate (anonymous method) get the even numbers


List<int> even1 = arrInt.FindAll(delegate(int i2) { return i2 % 2 == 0; });


 


//dump them in the console


foreach (int j in even1)


{


    Console.WriteLine(j);


}


 


Now, if I want to implement Lambda Expression there the code will look like,


 


//Generic List of Integers


List<int> arrInt = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };


 


//Using Lambda Expression get the even numbers


List<int> even1 = arrInt.FindAll(i => i % 2 ==0);


 


//dump them in the console


foreach (int j in even1)


{


    Console.WriteLine(j);


}


 


Now, if you want to create the same list by using Lambda Expression and Func


//This means I am creating a function which


//takes an argument integer and returns bool.


Func<int, bool> EvenGetter = x => x % 2 == 0;


 


//Generic List of Integers


List<int> arrInt = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };


 


//Using Lambda Expression get the even numbers


IEnumerable<int> even1 = arrInt.Where(EvenGetter);


 


//dump them in the console


foreach (int j in even1)


{


    Console.WriteLine(j);


}


 


So here we are reusing a Function with the name EvenGetter and this is like any other function not in embedded.


 


Func is very powerful, we can create List of Lambda Expression Functions and iterate through the list and check one input through multiple functions,


 


Let us assume that I need to pass one integer and get some four out puts. I will create Generic List of Func’s which takes one argument as double and returns double.


 


List<Func<double, double>> funcs = new List<Func<double,double>>();


 


//Add function to the list


funcs.Add(x => x * x); //Get the square


funcs.Add(x => 1 / x);


funcs.Add(x => Math.Sqrt(x)); //Sqr root of x


 


//iterate through the list


foreach (var f in funcs)


{


    //Execute the functions one by one with the value 100


    Console.WriteLine(f(100));   


}


 


 


Output


———


10000


0.01


10


Press any key to continue . . .


 This is pure functional programming.



Namoskar!!!