Что такое предикатный делегат?
1) Предикат - это функция, которая возвращает истину или ложь. Эта концепция появилась в .net 2.0 framework.
2) Используется с лямбда-выражением (=>). Он принимает универсальный тип в качестве аргумента.
3) Позволяет определить функцию предиката и передать ее в качестве параметра другой функции.
4) Это особый случай Func
, в котором он принимает только один параметр и всегда возвращает bool.
В пространстве имен C #:
namespace System
{
public delegate bool Predicate<in T>(T obj);
}
Он определен в пространстве имен системы.
Где мы должны использовать предикатный делегат?
Мы должны использовать Predicate Delegate в следующих случаях:
1) Для поиска предметов в общей коллекции.
например
var employeeDetails = employees.Where(o=>o.employeeId == 1237).FirstOrDefault();
2) Базовый пример, который сокращает код и возвращает true или false:
Predicate<int> isValueOne = x => x == 1;
сейчас, Вызовите предикат выше:
Console.WriteLine(isValueOne.Invoke(1)); // -- returns true.
3) Анонимный метод также может быть назначен типу делегата Predicate, как показано ниже:
Predicate<string> isUpper = delegate(string s) { return s.Equals(s.ToUpper());};
bool result = isUpper("Hello Chap!!");
Какие-либо передовые практики в отношении предикатов?
Вместо предикатов использовать Func, Lambda-выражения и делегаты.