<t>The difference between Func and Action is simply whether you want the delegate to return a value (use Func) or not (use Action).<br/>
<br/>
Func is probably most commonly used in LINQ - for example in projections:<br/>
<br/>
list.Select(x => x.SomeProperty)<br/>
<br/>
```<br/>
<br/>
or filtering:<br/>
<br/>
```<br/>
list.Where(x => x.SomeValue == someOtherValue)<br/>
<br/>
```<br/>
<br/>
or key selection:<br/>
<br/>
```<br/>
list.Join(otherList, x => x.FirstKey, y => y.SecondKey, ...)<br/>
<br/>
```<br/>
<br/>
`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`.<br/>
<br/>
`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.<br/>
<br/>
`Predicate` is mostly used in `List` for methods like `FindAll` and `RemoveAll`.</t>