Чтение онлайн

на главную - закладки

Жанры

C# 4.0 полное руководство - 2011

Шилдт Герберт

Шрифт:

В приведенном ниже примере программы демонстрируется применение предиката с целью определить, содержится ли в целочисленном массиве отрицательное значение. Если такое значение обнаруживается, то данная программа извлекает первое отрицательное значение, найденное в массиве. Для этого в ней используются методы 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<T> (T obj)

В этой форме объект, над которым должно выполняться действие, передается в качестве параметра obj. Когда же эта форма

делегата
Action применяется в методе Array. ForEach (), то каждый элемент массива передается по порядку объекту obj.

Следовательно, используя делегат Action и метод For Each , можно в одном операторе выполнить заданную операцию над целым массивом.

В приведенном ниже примере программы демонстрируется применение делегата 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.i = -o.i;

}

static void Main {

MyClass[] nums = new MyClass[5];

nums[0] = new MyClass(5); nums[l] = 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);

Ниже приведен результат выполнения этой программы.

Поделиться:
Популярные книги

Возвышение Меркурия. Книга 7

Кронос Александр
7. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 7

Темный Лекарь 4

Токсик Саша
4. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь 4

Неправильный боец РККА Забабашкин 3

Арх Максим
3. Неправильный солдат Забабашкин
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Неправильный боец РККА Забабашкин 3

Краш-тест для майора

Рам Янка
3. Серьёзные мальчики в форме
Любовные романы:
современные любовные романы
эро литература
6.25
рейтинг книги
Краш-тест для майора

Позывной "Князь"

Котляров Лев
1. Князь Эгерман
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Позывной Князь

Имя нам Легион. Том 5

Дорничев Дмитрий
5. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 5

Убивать чтобы жить 9

Бор Жорж
9. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 9

Кодекс Крови. Книга IV

Борзых М.
4. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга IV

Запечатанный во тьме. Том 1. Тысячи лет кача

NikL
1. Хроники Арнея
Фантастика:
уся
эпическая фантастика
фэнтези
5.00
рейтинг книги
Запечатанный во тьме. Том 1. Тысячи лет кача

Я снова граф. Книга XI

Дрейк Сириус
11. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я снова граф. Книга XI

Студиозус

Шмаков Алексей Семенович
3. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Студиозус

Часовое имя

Щерба Наталья Васильевна
4. Часодеи
Детские:
детская фантастика
9.56
рейтинг книги
Часовое имя

Пустоцвет

Зика Натаэль
Любовные романы:
современные любовные романы
7.73
рейтинг книги
Пустоцвет

Невеста напрокат

Завгородняя Анна Александровна
Любовные романы:
любовно-фантастические романы
6.20
рейтинг книги
Невеста напрокат