Sunday, April 12, 2009

Lambda Expressions as methods

Many of the Lambda expressions samples demonstrate Selects and Order By but I recently discovered the ability of Lambda expressions to be used as delegate methods. You can use Func<T> for methods that return a result which provides a very concise shorthand notation. In addition to Func<T> you can use Action<T> and Predicate<T>

Here is an example that uses Func<T,TResult> to add two numbers together

// Lambda Function that adds two numbers
Func<int, int, int> add = (int val1, int val2) => val1 + val2;

// add 200 and 100
Console.WriteLine(add(200, 100));

In this case the Func<int, int,int> indicates that the method takes two integers and returns an integer.

Action<T> allows you to capture behavior:

// Action<T> to echo input
Action<string> echo = (s) => Console.WriteLine(s);

// invoke echo

Predicate<T> allows you to filter:

// Create fibonacci sequence
List<int> fi = new List<int>();
fi.AddRange(new[] { 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 });

// select the matches
Predicate<int> matches = num => num % 2 == 1;
var odd = fi.FindAll(matches);

// use array Foreach<T> to display the results

In the example above I use Array.ForEach<T> to display the results instead of a foreach loop.

You can download the sample code here.

No comments: