Я хочу смочь записать что-то как
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? Корректно мое использование предиката?
Спасибо
Вот тривиальный пример использования предиката в функции.
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);
С точки зрения дизайна, цель предиката, передаваемого в функцию, обычно заключается в фильтрации некоторого IEnumerable , предикат проверяется для каждого элемента, чтобы определить, является ли элемент членом отфильтрованного набора.
В вашем примере лучше просто иметь функцию с логическим возвращаемым типом.
Вы можете сделать что-то вроде этого:
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);