Герберт Шилдт - 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: полное руководство - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
-------------------------------
ПРИМЕЧАНИЕ
Существует также форма оператора into
, предназначенная для использования вместе с оператором join
, создающим групповое объединение, о котором речь пойдет далее в этой главе.
-------------------------------
Ниже приведен пример программы, в которой оператор into
используется вместе с оператором group
. Эта программа является переработанным вариантом предыдущего примера, в котором список веб-сайтов формируется по имени домена самого верхнего уровня. А в данном примере первоначальные результаты запроса сохраняются в переменной диапазона ws и затем отбираются для исключения всех групп, состоящих менее чем из трех элементов.
// Использовать оператор into вместе с оператором group.
using System;
using System.Linq;
class IntoDemo {
static void Main() {
string[] websites = { "hsNameA.com", "hsNameB.net",
"hsNameC.net", "hsNameD.com", "hsNameE.org", "hsNameF.org",
"hsNameG.tv", "hsNameH.net", "hsNamel.tv"
};
// Сформировать запрос на получение списка
// веб-сайтов, группируемых
//по имени домена самого верхнего уровня, но выбрать только те
// группы, которые состоят более чем из двух членов.
// Здесь ws — это переменная диапазона для ряда групп,
// возвращаемых при выполнении первой половины запроса,
var webAddrs = from addr in websites
where addr.LastIndexOf('.') != -1
group addr by addr.Substring(addr.LastIndexOf('.'))
into ws where ws.Count() > 2 select ws;
// Выполнить запрос и вывести его результаты.
Console.WriteLine("Домены самого верхнего уровня " +
"с более чем двумя членами.");
foreach(var sites in webAddrs) {
Console.WriteLine("Содержимое домена: " + sites.Key);
foreach(var site in sites)
Console.WriteLine (" " + site);
Console.WriteLine();
}
}
}
Эта программа дает следующий результат:
Домены самого верхнего уровня с более чем двумя членами.
Содержимое домена: .net
hsNameB.net
hsNameC.net
hsNameH.net
Как следует из результата выполнения приведенной выше программы, по запросу возвращается только группа .net, поскольку это единственная группа, содержащая больше двух элементов.
Обратите особое внимание в данном примере программы на следующую последовательность операторов в формируемом запросе.
group addr by addr.Substring(addr.LastIndexOf('.'))
into ws where ws.Count() > 2 select ws;
Сначала результаты выполнения оператора group
сохраняются как временные для последующей обработки оператором where
. В качестве переменной диапазона в данный момент служит переменная ws
. Она охватывает все группы, возвращаемые оператором group
. Затем результаты запроса отбираются в операторе where
с таким расчетом, чтобы в конечном итоге остались только те группы, которые содержат больше двух членов. Для этой цели вызывается метод Count()
, который является методом расширения и реализуется для всех объектов типа IEnumerable
. Он возвращает количество элементов в последовательности. (Подробнее о методах расширения речь пойдет далее в этой главе.) А получающаяся в итоге последовательность групп возвращается оператором select
.
Применение оператора let для создания временной переменной в запросе
Иногда возникает потребность временно сохранить некоторое значение в самом запросе. Допустим, что требуется создать переменную перечислимого типа, которую можно будет затем запросить, или же сохранить некоторое значение, чтобы в дальнейшем использовать его в операторе where
. Независимо от преследуемой цели, эти виды функций могут быть осуществлены с помощью оператора let
. Ниже приведена общая форма оператора let
:
let имя = выражение
где имя обозначает идентификатор, получающий значение, которое дает выражение. Тип имени выводится из типа выражения.
В приведенном ниже примере программы демонстрируется применение оператора let
для создания еще одного перечислимого источника данных. В качестве входных данных в запрос вводится массив символьных строк, которые затем преобразуются в массивы типа char
. Для этой цели служит еще один метод обработки строк, называемый ToCharArray()
и возвращающий массив, содержащий символы в строке. Полученный результат присваивается переменной chrArray
, которая затем используется во вложенном операторе from
для извлечения отдельных символов из массива. И наконец, полученные символы сортируются в запросе, и из них формируется результирующая последовательность.
// Использовать оператор let в месте с вложенным оператором from.
using System;
using System.Linq;
class LetDemo {
static void Main() {
string[] strs = { "alpha", "beta", "gamma" };
// Сформировать запрос на получение символов, возвращаемых из
// строк в отсортированной последовательности. Обратите внимание
// на применение вложенного оператора from,
var chrs = from str in strs
let chrArray = str.ToCharArray()
from ch in chrArray orderby ch
select ch;
Console.WriteLine("Отдельные символы, отсортированные по порядку:");
// Выполнить запрос и вывести его результаты,
foreach(char с in chrs) Console.Write(с + " ");
Console.WriteLine();
}
}
Вот к какому результату приводит выполнение этой программы.
Отдельные символы, отсортированные по порядку:
a a a a a b e g h l m m p t
Обратите внимание в данном примере программы на то, что в операторе let
переменной chrArray
присваивается ссылка на массив, возвращаемый методом str.ToCharArray()
.
let chrArray = str.ToCharArray()
После оператора let
переменная chrArray
может использоваться в остальных операторах, составляющих запрос. А поскольку все массивы в C# преобразуются в тип IEnumerable
, то переменную chrArray
можно использовать в качестве источника данных для запроса во втором, вложенном операторе from
. Именно это и происходит в рассматриваемом здесь примере, где вложенный оператор from
служит для перечисления в массиве отдельных символов, которые затем сортируются по нарастающей и возвращаются в виде конечного результата.
Интервал:
Закладка: