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

ayi
Site Admin
Messages : 13176
Inscription : mer. avr. 22, 2026 5:21 pm

Re: Func vs. Action vs. Predicate

Message par ayi »

La différence entre Func et Action est simplement de savoir si vous voulez que le délégué retourne une valeur (utilisez Func) ou non (utilisez Action).


Func est probablement le plus couramment utilisé dans LINQ - par exemple dans les projections :


 list.Select(x => x.SomeProperty)


ou le filtrage :


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


ou la sélection de clé :


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


Action est plus couramment utilisé pour des choses comme List<T>.ForEach : exécuter l’action donnée pour chaque élément de la liste. Je l’utilise moins souvent que Func, bien que j’utilise parfois la version sans paramètre pour des choses comme Control.BeginInvoke et Dispatcher.BeginInvoke.


Predicate est en réalité juste un cas spécial de Func<T, bool>, introduit avant que tous les délégués Func et la plupart des délégués Action n’arrivent. Je soupçonne que si nous avions déjà eu Func et Action dans leurs différentes formes, Predicate n’aurait pas été introduit… bien qu’il transmette une certaine signification à l’utilisation du délégué, alors que Func et Action sont utilisés pour des objectifs très disparates.


Predicate est principalement utilisé dans List<T> pour des méthodes comme FindAll et RemoveAll.

Répondre

Revenir à « .NET & C# »