Sunday, December 29, 2013

Func vs Action vs Predicate in C#

Often users find certain aspects of functional programming in C# confusing and this is one of them.

To simply put Action<T> and Predicate<T> are special cases of Func<T,TResult>. And all of these are delegate types provided by C# so that you do not need to define your own delegate type.

Action<T>
When you need a delegate that takes in a parameter (say an int) and returns nothing (void) then you have,

Action<int> which is equivalent to Func<int,void>

(Note that Func<int,void> is not something valid and wont work, this is just to draw a parallel between Action and Func. )

Predicate<T>
When you need a delegate that takes in a parameter (say an int ) and returns a bool then you have,

Predicate<int> which is equivalent to Func<int,bool>

Typically Linq uses Func and List<T> uses Action and Predicate.

0 comments:

Post a Comment