HiveBrain v1.2.0
Get Started
← Back to all entries
principlecsharpCritical

Func vs. Action vs. Predicate

Submitted by: @import:stackoverflow-api··
0
Viewed 0 times
funcpredicateaction

Problem

With real examples and their use, can someone please help me understand:

  • When do we need a Func delegate?



  • When do we need an Action delegate?



  • When do we need a Predicate delegate?

Solution

The difference between Func and Action is simply whether you want the delegate to return a value (use Func) or not (use Action).

Func is probably most commonly used in LINQ - for example in projections:

list.Select(x => x.SomeProperty)


or filtering:

list.Where(x => x.SomeValue == someOtherValue)


or key selection:

list.Join(otherList, x => x.FirstKey, y => y.SecondKey, ...)


Action is more commonly used for things like List.ForEach: execute the given action for each item in the list. I use this less often than Func, although I do sometimes use the parameterless version for things like Control.BeginInvoke and Dispatcher.BeginInvoke.

Predicate is just a special cased Func really, introduced before all of the Func and most of the Action delegates came along. I suspect that if we'd already had Func and Action in their various guises, Predicate wouldn't have been introduced... although it does impart a certain meaning to the use of the delegate, whereas Func and Action are used for widely disparate purposes.

Predicate is mostly used in List for methods like FindAll and RemoveAll.

Code Snippets

list.Select(x => x.SomeProperty)
list.Where(x => x.SomeValue == someOtherValue)
list.Join(otherList, x => x.FirstKey, y => y.SecondKey, ...)

Context

Stack Overflow Q#4317479, score: 1102

Revisions (0)

No revisions yet.