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ą.