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