Герберт Шилдт - C# 4.0: полное руководство
- Название:C# 4.0: полное руководство
- Автор:
- Жанр:
- Издательство:ООО И.Д. Вильямс
- Год:2011
- Город:Москва -- Киев
- ISBN:978-5-8459-1684-6
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Герберт Шилдт - C# 4.0: полное руководство краткое содержание
В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки.
Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию
C# 4.0: полное руководство - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Тип объекта, возвращаемого по запросу, представляет собой экземпляр интерфейса IEnumerable
, где Т — тип получаемых элементов. Следовательно, тип переменной запроса должен быть экземпляром интерфейса IEnumerable
, а значение Т должно определяться типом значения, указываемым в операторе select
. В предыдущих примерах значению Т соответствовал тип int
, поскольку переменная n имела тип int. (Как пояснялось выше, переменная n относится к типу int
, потому что элементы именно этого типа хранятся в массиве nums
.) С учетом явного указания типа IEnumerable
упомянутый выше запрос можно было бы составить следующим образом.
IEnumerable posNums = from n in nums
where n > 0 select n;
Следует иметь в виду, что тип элемента, выбираемого оператором select
, должен соответствовать типу аргумента, передаваемого форме интерфейса IEnumerable
, используемой для объявления переменной запроса. Зачастую при объявлении переменных запроса используется ключевое слово var
вместо явного указания ее типа, поскольку это дает компилятору возможность самому вывести соответствующий тип данной переменной из оператора select
. Как будет показано далее в этой главе, такой подход оказывается особенно удобным в тех случаях, когда оператор select
возвращает из источника данных нечто более существенное, чем отдельный элемент.
Когда запрос выполняется в цикле foreach
, тип переменной шага цикла должен быть таким же, как и тип переменной диапазона. В предыдущих примерах тип этой переменной указывался явно как int
. Но имеется и другая возможность: предоставить компилятору самому вывести тип данной переменной, и для этого достаточно указать ее тип как var
. Как будет показано далее в этой главе, ключевое слово var приходится использовать и в тех случаях, когда тип данных просто неизвестен.
Общая форма запроса
У всех запросов имеется общая форма, основывающаяся на ряде приведенных ниже контекстно-зависимых ключевых слов.
Ascending
by
descending equals
from
group
in
into
join
let
on
orderby
select
where
Среди них лишь приведенные ниже ключевые слова используются в начале операторов запроса.
from
group
join
let
orderby
select
where
Запрос должен начинаться с ключевого слова from
и оканчиваться ключевым словом select
или group
. Оператор select
определяет тип значения, перечисляемого по запросу, а оператор group
возвращает данные группами, причем каждая группа может перечисляться по отдельности. Как следует из приведенных выше примеров, в операторе where
указываются критерии, которым должен удовлетворять искомый элемент, чтобы быть полученным по запросу. А остальные операторы позволяют уточнить запрос. Все они рассматриваются далее по порядку.
Отбор запрашиваемых значений с помощью оператора where
Как пояснялось выше, оператор where служит для отбора данных, возвращаемых по запросу. В предыдущих примерах этот оператор был продемонстрирован в своей простейшей форме, в которой для отбора данных используется единственное условие. Однако для более тщательного отбора данных можно задать несколько условий и, в частности, в нескольких операторах where
. В качестве примера рассмотрим следующую программу, в которой из массива выводятся только те значения, которые положительны и меньше 10.
// Использовать несколько операторов where.
using System;
using System.Linq;
class TwoWheres {
static void Main() {
int [ ] nums = { 1, -2, 3, -3, 0, -8, 12, 19, 6, 9, 10 };
// Сформировать запрос на получение положительных значений меньше 10.
var posNums = from n in nums where n > 0 where n < 10 select n;
Console.Write("Положительные значения меньше 10: ");
// Выполнить запрос и вывести его результаты.
foreach(int i in posNums) Console.Write (i + " ");
Console.WriteLine();
}
}
Эта программа дает следующий результат.
Положительные значения меньше 10: 1 3 6 9
Как видите, по данному запросу извлекаются только положительные значения меньше. 10. Этот результат достигается благодаря двум следующим операторам where
.
where n > 0 where n < 10
Условие в первом операторе where
требует, чтобы элемент массива был больше нуля. А условие во втором операторе where требует, чтобы элемент массива был меньше 10. Следовательно, запрашиваемый элемент массива должен находиться в пределах от 1 до 9 (включительно), чтобы удовлетворять обоим условиям.
В таком применении двух операторов where
для отбора данных нет ничего дурного, но аналогичного эффекта можно добиться с помощью более компактно составленного условия в единственном операторе where
. Ниже приведен тот же самый запрос, переформированный по этому принципу.
var posNums = from n in nums
where n>0 && n<10 select n;
Как правило, в условии оператора where
разрешается использовать любое допустимое в C# выражение, дающее булев результат. Например, в приведенной ниже программе определяется массив символьных строк. В ряде этих строк содержатся адреса Интернета. По запросу в переменой netAddrs
извлекаются только те строки, которые содержат более четырех символов и оканчиваются на ".net". Следовательно, по данному запросу обнаруживаются строки, содержащие адреса Интернета с именем . net домена самого верхнего уровня.
// Продемонстрировать применение еще одного оператора where.
using System;
using System.Linq;
class WhereDemo2 {
static void Main() {
string[] strs = { ".com", ".net", "hsNameA.com",
"hsNameB.net", "test", ".network",
"hsNameC.net", "hsNameD.com" };
// Сформировать запрос на получение адресов
// Интернета, оканчивающихся на .net.
var netAddrs = from addr in strs
where addr.Length > 4 &&
addr.EndsWith(".net", StringComparison.Ordinal)
select addr;
// Выполнить запрос и вывести его результаты.
foreach(var str in netAddrs) Console.WriteLine(str);
}
}
Вот к какому результату приводит выполнение этой программы.
Читать дальшеИнтервал:
Закладка: