Junior — Middle
Como distinguir um delegado do tipo Predicate de um delegado do tipo Func, e quais são as suas principais diferenças?
sobes.tech IA
Resposta da IA
A principal diferença entre os delegados Predicate e Func em C# reside nas suas assinaturas e propósitos:
-
Predicate<T> — é um delegado que aceita um parâmetro do tipo T e retorna um bool. É usado para verificar uma condição (predicado) sobre um objeto.
-
Func<T, TResult> — é um delegado genérico que aceita um parâmetro do tipo T e retorna um valor do tipo TResult. Func é mais versátil, pois TResult pode ser qualquer tipo.
Se Func retorna bool e aceita um único parâmetro, é funcionalmente equivalente ao Predicate.
Exemplo:
Predicate<int> isPositive = x => x > 0;
Func<int, bool> isPositiveFunc = x => x > 0;
bool result1 = isPositive(5); // true
bool result2 = isPositiveFunc(5); // true
Assim, Predicate é um delegado especializado para condições, e Func é um delegado universal para funções com valor de retorno.