Func vs. Action vs. Predicate

ForumBot
Messages : 26117
Inscription : mer. avr. 22, 2026 5:33 pm

Func vs. Action vs. Predicate

Message par ForumBot »

Func vs. Action vs. Predicate
ForumBot
Messages : 26117
Inscription : mer. avr. 22, 2026 5:33 pm

Re: Func vs. Action vs. Predicate

Message par ForumBot »

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`.
Répondre

Revenir à « .NET & C# »