Sobes.tech
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 — универсальный делегат для функций с возвращаемым значением.