Можешь мне объяснить:
- Что такое предикатный делегат?
- Где мы должны использовать предикаты?
- Какие-либо лучшие практики при использовании предикатов?
Описательный исходный код будет оценен.
Предикат - это функция, которая возвращает true
или false
. Делегат предиката является ссылкой на предикат.
Таким образом, в основном делегат предиката является ссылкой на функцию, которая возвращает true
или false
. Предикаты очень полезны для фильтрации списка значений - вот пример.
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> list = new List<int> { 1, 2, 3 };
Predicate<int> predicate = new Predicate<int>(greaterThanTwo);
List<int> newList = list.FindAll(predicate);
}
static bool greaterThanTwo(int arg)
{
return arg > 2;
}
}
Теперь, если вы используете C # 3, вы можете использовать лямбду для более четкого представления предиката:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> list = new List<int> { 1, 2, 3 };
List<int> newList = list.FindAll(i => i > 2);
}
}
yeild return
вместо этого? Или как это работает, как оно перебирает весь список?greaterThanTwo
естьreturn
неyield return
так как этоFindAll
метод , который обрабатывает последовательность для вас.i > val
вместо тогоi > 2
, гдеval
находится значение, введенное пользователем.Исходя из ответа Эндрю относительно c # 2 и c # 3 ... вы также можете сделать их встроенными для одноразовой функции поиска (см. Ниже).
Надеюсь это поможет.
источник
Просто делегат, который возвращает логическое значение. Он часто используется при фильтрации списков, но может использоваться везде, где вы хотите.
источник
Там хорошая статья о предикатах здесь , хотя это от .NET2 эпохи, так что нет никакого упоминания о лямбда - выражений там.
источник
Что такое предикатный делегат?
1) Предикат - это функция, которая возвращает истину или ложь. Эта концепция появилась в .net 2.0 framework. 2) Используется с лямбда-выражением (=>). Он принимает универсальный тип в качестве аргумента. 3) Позволяет определить функцию предиката и передать ее в качестве параметра другой функции. 4) Это особый случай
Func
, в котором он принимает только один параметр и всегда возвращает логическое значение.В пространстве имен C #:
Он определяется в пространстве имен System.
Где мы должны использовать предикатный делегат?
Мы должны использовать Predicate Delegate в следующих случаях:
1) Для поиска предметов в общей коллекции. например
2) Базовый пример, который сокращает код и возвращает true или false:
Теперь вызов выше предиката:
3) Анонимный метод также может быть назначен типу делегата Predicate, как показано ниже:
Какие-нибудь лучшие практики о предикатах?
Используйте Func, лямбда-выражения и делегаты вместо предикатов.
источник
Методы поиска на основе предикатов позволяют делегату метода или лямбда-выражению решать, является ли данный элемент «совпадающим». Предикат - это просто делегат, принимающий объект и возвращающий истину или ложь: открытый делегат bool Predicate (T object);
источник
Если вы в VB 9 (VS2008), предикат может быть сложной функцией:
Или вы можете написать свой предикат в виде лямбды, если это только одно выражение:
источник
Предикат подпадает под категорию общих делегатов в C #. Это вызывается с одним аргументом и всегда возвращает логический тип. По сути, предикат используется для проверки условия - истина / ложь. Многие классы поддерживают предикат в качестве аргумента. Например, list.findall ожидает предикат параметра. Вот пример предиката.
Представьте себе указатель на функцию с подписью -
bool делегат myDelegate (T match);
Вот пример
Node.cs
Основной класс -
источник
Просто -> они предоставляют Истинные / Ложные значения, основанные на условии, в основном используемом для запросов. в основном используется с делегатами
рассмотрим пример списка
содержит имена и возраст. Теперь скажите, что мы хотим найти имена при условии, поэтому я буду использовать,
пытался сохранить это простым!
источник
Делегат определяет ссылочный тип, который можно использовать для инкапсуляции метода с определенной сигнатурой. Жизненный цикл делегата C #: жизненный цикл делегата C #
узнать больше формы http://asp-net-by-parijat.blogspot.in/2015/08/what-is-delegates-in-c-how-to-declare.html
источник