Sobes.tech
Junior — Middle

Come distinguere un delegato di tipo Predicate da un delegato di tipo Func, e quali sono le loro principali differenze?

sobes.tech AI

Risposta dell'AI

La differenza principale tra i delegati Predicate e Func in C# risiede nelle loro firme e scopi:

  • Predicate<T> — è un delegato che accetta un parametro di tipo T e restituisce un bool. Viene usato per verificare una condizione (predicato) su un oggetto.

  • Func<T, TResult> — è un delegato generico che accetta un parametro di tipo T e restituisce un valore di tipo TResult. Func è più versatile, poiché TResult può essere di qualsiasi tipo.

Se Func restituisce bool e accetta un solo parametro, è funzionalmente equivalente a Predicate.

Esempio:

Predicate<int> isPositive = x => x > 0;
Func<int, bool> isPositiveFunc = x => x > 0;

bool result1 = isPositive(5);       // true
bool result2 = isPositiveFunc(5);   // true

Pertanto, Predicate è un delegato specializzato per le condizioni, mentre Func è un delegato universale per le funzioni con valore di ritorno.