Делегаты предиката в C#

Вероятно, проще всего сохранить все, что вы хотите (что говорит пользователь, любые его части и т. Д.) В параметре context из вашего webhook. Это будет распространяться на все раунды вашего разговора, пока счетчик продолжительности жизни в контексте не уменьшается до 0. Вы можете обновлять этот параметр контекста каждый раунд через ваш веб-крюк выполнения.

251
задан Brian 11 January 2019 в 06:25
поделиться

6 ответов

Предикат является функцией, которая возвращается 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);
    }
}
316
ответ дан Andrew Hare 23 November 2019 в 02:54
поделиться

Вовлекая из ответа Andrew относительно c#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(delegate(int arg)
                           {
                               return arg> 2;
                           });
    }
}

Hope это помогает.

81
ответ дан WestDiscGolf 23 November 2019 в 02:54
поделиться

Просто делегат, который возвращает булевскую переменную. Это используется много в фильтрации списков, но может использоваться везде, где Вы хотели бы.

List<DateRangeClass>  myList = new List<DateRangeClass<GetSomeDateRangeArrayToPopulate);
myList.FindAll(x => (x.StartTime <= minDateToReturn && x.EndTime >= maxDateToReturn):
11
ответ дан Adam Carr 23 November 2019 в 02:54
поделиться

Существует хорошая статья о предикатах здесь , хотя это с.NET2 эры, таким образом, нет никакого упоминания о лямбда-выражениях там.

9
ответ дан LukeH 23 November 2019 в 02:54
поделиться

Просто-> они обеспечивают Истинные/Ложные значения на основе условия, главным образом используемого для запросов. главным образом используемый с делегатами

полагают, что пример списка

List<Program> blabla= new List<Program>();
        blabla.Add(new Program("shubham", 1));
        blabla.Add(new Program("google", 3));
        blabla.Add(new Program("world",5));
        blabla.Add(new Program("hello", 5));
        blabla.Add(new Program("bye", 2));

содержит имена и возрасты. Теперь скажите, что мы хотим найти имена при условии, Таким образом, я буду использовать,

    Predicate<Program> test = delegate (Program p) { return p.age > 3; };
        List<Program> matches = blabla.FindAll(test);
        Action<Program> print = Console.WriteLine;
        matches.ForEach(print);

пытался Сохранить это Простым!

0
ответ дан 23 November 2019 в 02:54
поделиться

Если вы используете VB 9 (VS2008), предикат может быть сложной функцией:

Dim list As New List(Of Integer)(New Integer() {1, 2, 3})
Dim newList = list.FindAll(AddressOf GreaterThanTwo)
...
Function GreaterThanTwo(ByVal item As Integer) As Boolean
    'do some work'
    Return item > 2
End Function

Или вы можете записать свой предикат как лямбду, если это только одно выражение:

Dim list As New List(Of Integer)(New Integer() {1, 2, 3})
Dim newList = list.FindAll(Function(item) item > 2)
2
ответ дан 23 November 2019 в 02:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: