Sobes.tech
Junior — Middle

Jak odróżnić delegata typu Predicate od delegata typu Func, i jakie są ich główne różnice?

sobes.tech AI

Odpowiedź od AI

Główna różnica między delegatami Predicate i Func w C# polega na ich sygnaturach i przeznaczeniu:

  • Predicate<T> — to delegat, który przyjmuje jeden parametr typu T i zwraca bool. Używany do sprawdzania warunku (predykatu) na obiekcie.

  • Func<T, TResult> — to generyczny delegat, który przyjmuje parametr typu T i zwraca wartość typu TResult. Func jest bardziej uniwersalny, ponieważ TResult może być dowolnym typem.

Jeśli Func zwraca bool i przyjmuje jeden parametr, jest funkcjonalnie równoważny Predicate.

Przykład:

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

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

W związku z tym, Predicate to specjalistyczny delegat do warunków, a Func to uniwersalny delegat do funkcji z wartością zwracaną.