public delegate bool Predicate
Объект, проверяемый по заданному условию, передается в качестве параметра
В приведенном ниже примере программы демонстрируется применение предиката с целью определить, содержится ли в целочисленном массиве отрицательное значение. Если такое значение обнаруживается, то данная программа извлекает первое отрицательное значение, найденное в массиве. Для этого в ней используются методы
Exists() иFind.class PredDemo {
// Предикатный метод, возвращающий логическое значение true,
// если значение переменной v оказывается отрицательным, static bool IsNeg(int v) { if (v < 0) return true; return false;
}
static void Main {
int[] nums = { 1, 4, -1, 5, -9 };
Console.Write("Содержимое массива nums: "); foreach(int i in nums)
Console.Write (i + " ");
Console.WriteLine;
// Сначала проверить, содержит ли массив nums отрицательное значение, if(Array.Exists(nums, PredDemo.IsNeg)) {
Console.WriteLine("Массив nums содержит отрицательное значение.");
// Затем найти первое отрицательное значение" в массиве, int х = Array.Find(nums, PredDemo.IsNeg);
Console.WriteLine("Первое отрицательное значение: " + x);
}
else
Console.WriteLine("В массиве nums отсутствуют отрицательные значения.");
}
}
Эта программа дает следующий результат.
Содержимое массива nums: 14-15-9 Массив nums содержит отрицательное значение.
Первое отрицательное значение: -1
В данном примере программы в качестве предиката методам
Exists и Find передается метод IsNeg . Обратите внимание на следующее объявление метода IsNeg.static bool IsNeg (int v) {
Методы
Exists и Find автоматически и по порядку передают элементы массива переменной v. Следовательно, после каждого вызова метода IsNeg переменная v будет содержать следующий элемент массива.Применение делегата Action
Делегат
Action применяется в методе Array. ForEach для выполнения заданного действия над каждым элементом массива. Существуют разные формы делегата Action, отличающиеся числом параметров типа. Ниже приведена одна из таких форм.public delegate void Action