Как определить предикат как аргумент функции

Я хочу смочь записать что-то как

void Start(some condition that might evaluate to either true or false) {
    //function will only really start if the predicate evaluates to true
}

Я предположил бы, что это должно быть что-то вроде формы:

void Start(Predicate predicate) {
}

Как я могу проверить в своей функции Запуска каждый раз, когда предикат оценил к TRUE или FALSE? Корректно мое использование предиката?

Спасибо

8
задан devoured elysium 24 April 2010 в 03:47
поделиться

3 ответа

Вот тривиальный пример использования предиката в функции.

static void CheckRandomValueAgainstCriteria(Predicate<int> predicate, int maxValue)
{
    Random random = new Random();
    int value = random.Next(0, maxValue);

    Console.WriteLine(value);

    if (predicate(value))
    {
        Console.WriteLine("The random value met your criteria.");
    }
    else
    {
        Console.WriteLine("The random value did not meet your criteria.");
    }
}

...

CheckRandomValueAgainstCriteria(i => i < 20, 40);
13
ответ дан 5 December 2019 в 10:39
поделиться

С точки зрения дизайна, цель предиката, передаваемого в функцию, обычно заключается в фильтрации некоторого IEnumerable , предикат проверяется для каждого элемента, чтобы определить, является ли элемент членом отфильтрованного набора.

В вашем примере лучше просто иметь функцию с логическим возвращаемым типом.

1
ответ дан 5 December 2019 в 10:39
поделиться

Вы можете сделать что-то вроде этого:

void Start(Predicate<int> predicate, int value)
    {
        if (predicate(value))
        {
            //do Something
        }         
    }

Где вы вызываете метод следующим образом:

Start(x => x == 5, 5);

Я не знаю, насколько это будет полезно. Предикаты действительно удобны для таких вещей, как списки фильтрации:

List<int> l = new List<int>() { 1, 5, 10, 20 };
var l2 = l.FindAll(x => x > 5);
2
ответ дан 5 December 2019 в 10:39
поделиться
Другие вопросы по тегам:

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