Back to questions
Junior — Middle
67
Как отличить делегат типа Predicate от делегата типа Func, и в чем их основные различия?
Answer from AI
sobes.tech AI
Основное различие между делегатами Predicate и Func в C# заключается в их сигнатурах и назначении:
-
Predicate<T> — это делегат, который принимает один параметр типа T и возвращает bool. Используется для проверки условия (предиката) над объектом.
-
Func<T, TResult> — это обобщенный делегат, который принимает параметр типа T и возвращает значение типа TResult. Func более универсален, так как TResult может быть любым типом.
Если Func возвращает bool и принимает один параметр, то он функционально эквивалентен Predicate.
Пример:
Predicate<int> isPositive = x => x > 0;
Func<int, bool> isPositiveFunc = x => x > 0;
bool result1 = isPositive(5); // true
bool result2 = isPositiveFunc(5); // true
Таким образом, Predicate — это специализированный делегат для условий, а Func — универсальный делегат для функций с возвращаемым значением.