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

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

Жанры

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

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

Шрифт:

Метод Count уже демонстрировался ранее в этой главе. А в следующей программе демонстрируются остальные методы расширения, связанные с запросами.

// Использовать ряд методов расширения, определенных в классе Enumerable.

using System; using System.Linq;

class ExtMethods { static void Main {

int[] nums = { 3, 1, 2, 5, 4 };

Console .WriteLine ("Минимальное значение

равно " + nums.MinO);

Console.WriteLine("Максимальное значение равно " + nums.Max);

Console.WriteLine("Первое значение равно " + nums.First);

Console.WriteLine("Последнее значение равно " + nums.Last);

Console.WriteLine("Суммарное значение равно " + nums.SumO);

Console.WriteLine("Среднее значение равно " + nums.Average);

if(nums.All(n => n > 0))

Console.WriteLine("Все значения больше нуля.");

if(nums.Any(n => (n % 2) == 0))

Console.WriteLine("По крайней мере одно значение является четным.");

if(nums.Contains(3))

Console.WriteLine("Массив содержит значение 3.");

}

}

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

Минимальное значение равно 1 Максимальное значение равно 5 Первое значение равно 3 Последнее значение равно 4 Суммарное значение равно 15 Среднее значение равно 3 Все значения больше нуля.

По крайней мере одно значение является четным Массив содержит значение 3.

Методы расширения, связанные с запросами, можно также использовать в самом запросе, основываясь на синтаксисе запросов, предусмотренном в С#. И в действительности это делается очень часто. Например, метод Average используется в приведенной ниже программе для получения последовательности, состоящей только из тех значений, которые оказываются меньше среднего всех значений в массиве.

// Использовать метод Average вместе с синтаксисом запросов.

using System; using System.Linq;

class ExtMethods2 { static void Main {

int[] nums = { 1, 2, 4, 8, 6, 9, 10, 3, 6, 7 };

var ItAvg = from n in nums

let x = nums.Average where n < x select n;

Console.WriteLine("Среднее значение равно " + nums.Average);

Console.Write("Значения меньше среднего: ");

// Выполнить запрос и вывести его результаты, foreach(int i in ItAvg) Console.Write(i + " ");

Console.WriteLine ;

}

}

При выполнении этой программы получается следующий результат.

Среднее значение равно 5.6 Значения меньше среднего: 12 4 3

Обратите

особое внимание в этой программе на следующий код запроса.

var ItAvg = from n in nums

let x = nums.Average where n < x select n;

Как видите, переменной x в операторе let присваивается среднее всех значений в массиве nums. Это значение получается в результате вызова метода Average для массива nums.

Режимы выполнения запросов: отложенный и немедленный

В LINQ запросы выполняются в двух разных режимах: немедленном и отложенном. Как пояснялось ранее в этой главе, при формировании запроса определяется ряд правил, которые не выполняются вплоть до оператора цикла foreach. Это так называемое отложенное выполнение.

Но если используются методы расширения, дающие результат, отличающийся от последовательности, то запрос должен быть выполнен для получения этого результата. Рассмотрим, например, метод расширения Count . Для того чтобы этот метод возвратил количество элементов в последовательности, необходимо выполнить запрос, и это делается автоматически при вызове метода Count . В этом случае имеет место немедленное выполнение, когда запрос выполняется автоматически для получения требуемого результата. Таким образом, запрос все равно выполняется, даже если он не1 используется явно в цикле foreach.

Ниже приведен простой пример программы для получения количества положительных элементов, содержащихся в последовательности.

using System.Linq;

class ImmediateExec { static void Main {

int[] nums = { 1, – 2, 3, 0, – 4, 5 };

// Сформировать запрос на получение количества // положительных значений в массиве nums. int len = (from n in nums where n > 0 select n).Count;

Console.WriteLine("Количество положительных значений в массиве nums: " + len) ;

}

}

Эта программа дает следующий результат.

Количество положительных значений в массиве nums: 3

Обратите внимание на то, что цикл foreach не указан в данной программе явным образом. Вместо этого запрос выполняется автоматически благодаря вызову метода расширения Count .

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

Тайный наследник для миллиардера

Тоцка Тала
Любовные романы:
современные любовные романы
5.20
рейтинг книги
Тайный наследник для миллиардера

Шесть принцев для мисс Недотроги

Суббота Светлана
3. Мисс Недотрога
Фантастика:
фэнтези
7.92
рейтинг книги
Шесть принцев для мисс Недотроги

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

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

Печать пожирателя 2

Соломенный Илья
2. Пожиратель
Фантастика:
городское фэнтези
попаданцы
аниме
сказочная фантастика
5.00
рейтинг книги
Печать пожирателя 2

Его нежеланная истинная

Кушкина Милена
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Его нежеланная истинная

Дочь опальной герцогини

Лин Айлин
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Дочь опальной герцогини

Шаман. Похищенные

Калбазов Константин Георгиевич
1. Шаман
Фантастика:
боевая фантастика
попаданцы
6.44
рейтинг книги
Шаман. Похищенные

Завод 2: назад в СССР

Гуров Валерий Александрович
2. Завод
Фантастика:
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Завод 2: назад в СССР

Эволюционер из трущоб. Том 7

Панарин Антон
7. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 7

Запрети любить

Джейн Анна
1. Навсегда в моем сердце
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Запрети любить

Спасение 6-го

Уолш Хлоя
3. Парни из школы Томмен
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Спасение 6-го

Усадьба леди Анны

Ром Полина
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Усадьба леди Анны

Пипец Котенку!

Майерс Александр
1. РОС: Пипец Котенку!
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Пипец Котенку!

Черный дембель. Часть 1

Федин Андрей Анатольевич
1. Черный дембель
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Черный дембель. Часть 1