Console.WriteLine("Массив nums содержит отрицательное значение.");
// Затем найти первое отрицательное значение" в массиве,
int x = Array.Find(nums, PredDemo.IsNeg);
Console.WriteLine("Первое отрицательное значение: " + x);
}
else
Console.WriteLine("В массиве nums отсутствуют отрицательные значения.");
}
}
Эта программа дает следующий результат.
Содержимое массива nums: 1 4 -1 5 -9
Массив nums содержит отрицательное значение.
Первое отрицательное значение: -1
В данном примере программы в качестве предиката методам Exists()
и Find()
передается метод IsNeg()
. Обратите внимание на следующее объявление метода IsNeg()
.
static bool IsNeg (int v) {
Методы Exists()
и Find()
автоматически и по порядку передают элементы массива переменной v. Следовательно, после каждого вызова метода IsNeg()
переменная v будет содержать следующий элемент массива.
Делегат Action
применяется в методе Array.ForEach()
для выполнения заданного действия над каждым элементом массива. Существуют разные формы делегата Action
, отличающиеся числом параметров типа. Ниже приведена одна из таких форм.
public delegate void Action
В этой форме объект, над которым должно выполняться действие, передается в качестве параметра obj
. Когда же эта форма делегата Action
применяется в методе Array.ForEach()
, то каждый элемент массива передается по порядку объекту obj
.
Следовательно, используя делегат Action
и метод ForEach()
, можно в одном операторе выполнить заданную операцию над целым массивом.
В приведенном ниже примере программы демонстрируется применение делегата Action
и метода ForEach()
. Сначала в ней создается массив объектов класса MyClass
, а затем используется метод Show()
для отображения значений, извлекаемых из этого массива. Далее эти значения становятся отрицательными с помощью метода Neg()
. И наконец, метод Show()
используется еще раз для отображения отрицательных значений. Все эти операции выполняются посредством вызовов метода ForEach()
.
// Продемонстрировать применение делегата Action.
using System;
class MyClass {
public int i;
public MyClass(int x) {
i = x;
}
}
class ActionDemo {
// Метод делегата Action, отображающий значение, которое ему передается,
static void Show(MyClass о) {
Console.Write(о.i + " ");
}
// Еще один метод делегата Action, делающий
// отрицательным значение, которое ему передается.
static void Neg(MyClass o) {
o.i = -o.i;
}
static void Main() {
MyClass[] nums = new MyClass[5];
nums[0] = new MyClass(5);
nums[1] = new MyClass(2);
nums[2] = new MyClass(3);
nums[3] = new MyClass(4);
nums[4] = new MyClass(1);
Console.Write("Содержимое массива nums: ");
// Выполнить действие для отображения значений.
Array.ForEach(nums, ActionDemo.Show);
Console.WriteLine();
// Выполнить действие для отрицания значений.
Array.ForEach(nums, ActionDemo.Neg);
Console.Write("Содержимое массива nums после отрицания: ");
// Выполнить действие для повторного отображения значений.
Array.ForEach(nums, ActionDemo.Show);
}
}
Ниже приведен результат выполнения этой программы.
Содержимое массива nums: 5 2 3 4 1
Содержимое массива nums после отрицания: -5 -2 -3 -4 -1
Класс BitConverter