Sobes.tech
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.