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

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

Жанры

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

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

Шрифт:

Console.WriteLine("{0:#.##}", r);

}

}

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

Квадратные корни положительных значений, округленные до двух десятичных цифр:

4.05

3.48

10.04

5.02

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

select Math.Sqrt(n);

Он возвращает квадратный

корень значения переменной диапазона. Для этого значение переменной диапазона передается методу
Math. Sqrt (), который возвращает квадратный корень своего аргумента. Это означает, что последовательность результатов, получаемых при выполнении запроса, будет содержать квадратные корни положительных значений, хранящихся в массиве nums. Если обобщить этот принцип, то его эффективность станет вполне очевидной. Так, с помощью оператора select можно сформировать любой требующийся тип последовательности результатов, исходя из значений, получаемых из источника данных.

Ниже приведена программа, демонстрирующая другое применение оператора select. В этой программе сначала создается класс EmailAddress, содержащий два свойства. В первом из них хранится имя адресата, а во втором — адрес его электронной почты. Затем в этой программе создается массив, содержащий несколько элементов данных типа EmailAddress. И наконец, в данной программе создается список, состоящий только из адресов электронной почты, извлекаемых по запросу.

// Возвратить часть значения переменной диапазона.

using System; using System.Linq;

class EmailAddress {

public string Name { get; set; } public string Address { get; set; }

public EmailAddress(string n, string a) {

Name = n;

Address = a;

}

}

class SelectDemo2 { static void Main {

EmailAddress[] addrs = { new EmailAddress("Герберт", "[email protected]"), new EmailAddress("Tom", "[email protected]"), new EmailAddress("Capa", "[email protected]")

};

// Сформировать запрос на получение адресов

// электронной почты.

var eAddrs = from entry in addrs

select entry.Address;

Console.WriteLine("Адреса электронной почты:");

// Выполнить запрос и вывести его результаты, foreach(string s in eAddrs)

Console.WriteLine(" " + s);

}

}

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

Адреса электронной почты:

[email protected]

[email protected] [email protected]

Обратите особое внимание на следующий оператор select, select entry.Address;

Вместо полного значения переменной диапазона этот оператор возвращает лишь его адресную часть (Address). Это означает, что по данному запросу возвращается последовательность символьных строк, а не объектов типа Email Address. Именно

поэтому переменная
s указывается в цикле foreach как string. Ведь как пояснялось ранее, тип последовательности результатов, возвращаемых по запросу, определяется типом значения, возвращаемым оператором select.

Одной из самых эффективных для оператора select является возможность возвращать последовательность результатов, содержащую элементы данных, формируемые во время выполнения запроса. В качестве примера рассмотрим еще одну программу. В ней определяется класс Contactlnfo, в котором хранится имя, адрес электронной почты и номер телефона адресата. Кроме того, в этой программе определяется класс Email Addr ess, использовавшийся в предыдущем примере. В методе Main создается массив объектов типа Contactlnfo, а затем объявляется запрос, в котором источником данных служит этот массив, но возвращаемая последовательность результатов содержит объекты типа EmailAddress. Таким образом, типом последовательности результатов, возвращаемой оператором select, является класс EmailAddress, а не класс Contactlnfo, причем его объекты создаются во время выполнения запроса.

// Использовать запрос для получения последовательности объектов // типа EmailAddresses из списка объектов типа Contactlnfo.

using System; using System.Linq;

class Contactlnfo {

public string Name { get; set; } public string Email { get; set; }

public string Phone { get; set; }

public Contactlnfo(string n, string a, string p) {

Name = n;

Email = a;

Phone = p;

}

}

class EmailAddress {

public string Name { get; set; } public string Address { get; set; } public EmailAddress(string n, string a) {

Name = n;

Address = a;

} -

}

class SelectDemo3 { static void Main {

Contactlnfo[] contacts = {

new Contactlnfo("Герберт", "[email protected]", "555-1010"), new Contactlnfo("Том", "[email protected]", "555-1101"), new Contactlnfo("Capa", "[email protected]", "555-0110")

}; •

// Сформировать запрос на получение списка объектов типа EmailAddress. var emailList = from entry in contacts

select new EmailAddress(entry.Name, entry.Email);

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

Аргумент барона Бронина 3

Ковальчук Олег Валентинович
3. Аргумент барона Бронина
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Аргумент барона Бронина 3

Я знаю твою тайну

Ольховская Вероника
Любовные романы:
остросюжетные любовные романы
короткие любовные романы
5.00
рейтинг книги
Я знаю твою тайну

Барон нарушает правила

Ренгач Евгений
3. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон нарушает правила

Курсант: Назад в СССР 11

Дамиров Рафаэль
11. Курсант
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Курсант: Назад в СССР 11

Последний из рода Демидовых

Ветров Борис
Фантастика:
детективная фантастика
попаданцы
аниме
5.00
рейтинг книги
Последний из рода Демидовых

Чапаев и пустота

Пелевин Виктор Олегович
Проза:
современная проза
8.39
рейтинг книги
Чапаев и пустота

Враг из прошлого тысячелетия

Еслер Андрей
4. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Враг из прошлого тысячелетия

Страж Кодекса. Книга II

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

Три `Д` для миллиардера. Свадебный салон

Тоцка Тала
Любовные романы:
современные любовные романы
короткие любовные романы
7.14
рейтинг книги
Три `Д` для миллиардера. Свадебный салон

Отец моего жениха

Салах Алайна
Любовные романы:
современные любовные романы
7.79
рейтинг книги
Отец моего жениха

Черный Маг Императора 11

Герда Александр
11. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Черный Маг Императора 11

Кадры решают все

Злотников Роман Валерьевич
2. Элита элит
Фантастика:
боевая фантастика
попаданцы
альтернативная история
8.09
рейтинг книги
Кадры решают все

Неудержимый. Книга VIII

Боярский Андрей
8. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
6.00
рейтинг книги
Неудержимый. Книга VIII

Последняя Арена 6

Греков Сергей
6. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 6