Avatar ·

Quelle est la différence entre Func, Action et Predicate en C# ? Quand utiliser quoi ?

Bonjour, collègues ! J'ai récemment commencé à étudier C# et je suis tombé sur les délégués intégrés : Func, Action et Predicate. Ils semblent tous similaires — ce sont des délégués génériques, mais je suis confus quant à quand utiliser lequel.

Je comprends qu'ils permettent tous de passer des méthodes en paramètres, mais leurs signatures sont différentes. Par exemple, j'ai vu ce code :

Func<int, int, int> add = (x, y) => x + y;
Action<string> print = s => Console.WriteLine(s);
Predicate<int> isEven = x => x % 2 == 0;

Apparemment, tous les trois prennent des arguments et font quelque chose. Mais pourquoi utilise-t-on Predicate pour vérifier la parité, et non Func<int, bool> ? Et pourquoi Action est-il nécessaire si on peut utiliser Func avec un type de retour void ?

Dites-moi, s'il vous plaît, quelle est la différence fondamentale entre ces trois types de délégués, et comment choisir le bon dans un cas spécifique ?