principlecsharpCritical
Func vs. Action vs. Predicate
Viewed 0 times
funcpredicateaction
Problem
With real examples and their use, can someone please help me understand:
- When do we need a
Funcdelegate?
- When do we need an
Actiondelegate?
- When do we need a
Predicatedelegate?
Solution
The difference between
or filtering:
or key selection:
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.