Главная » Просмотр файлов » Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010)

Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (1160865), страница 145

Файл №1160865 Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010)) 145 страницаНэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (1160865) страница 1452019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 145)

Итератор может зависеть от других вложенных объектов, и они также инициализируются. Результат выражения ЫХЯ получается сразу после запуска итерации по переменной запроса с помощью оператора Тогезсп либо с использованием интерфейса 1ЕпогкегзЬ1е. В качестве примера рассмотрим несколько измененный код примера из раздела "Выражения запросов" в начале главы. Для удобства ниже приводится только самый значимый код: ВН0: язык интегрированных запросов 543 чаг к(оегу = Ггов евр1суее Ьп евр1оуеея илеге евр1суее.эа1агу > 100000 яе1есг пен ( Ьяясияве -- евр1оуее.ьяяскаве, Е1гяспзве = евр1оуее.г1гякнзве )г Сопяо1е.игггеЬ1пе( "Высокооплачиваемые сотрудники:" )Г Гогезсл( чаг 1сев 1п ячеку ) ( Сопяо1е.нггсеЬЬпе( "(О), (1)", 1сев.ьзякнаве, 1сев.гггякнаве ); Обратите внимание,что единственное отличие связано с удалением конструкции огоегЬу из первоначального выражения Ы)ч(Я;причины этого объясняются в следующем разделе.

В данном случае запрос транслируется в цепочку связанных вызовов расширяющих методов на переменной евр1оуеея. Каждый из этих методов возвращает объект, реализующий 1ЕпшпегаЬ1е<Т>. В действительности эти объекты представляют собой итераторы, созданные оператором у1е1г(.

Давайте посмотрим. что происходит, когда начинается итерация по переменной запроса в блоке Тогезсп. Чтобы получить очередной результат, сначала конструкция Тгов извлекает следующий элемент из коллекции евр1оуеея и заставляет переменную диапазона евр1оуее ссылаться на него. Затем, "за кулисами", конструкция нпеге передает следующий элемент, на который ссылается переменная диапазона. расширяющему методу Ипеге. Если он отнлоняется фильтром, выполнение передается обратно конструкции Тгов для получения следующего элемента в коллекции. Выполнение продолжается в цикле до тех пор, пока евр1оуее я полностью не опустошается или элемент евр1оуеея проходит предикат конструкции нпеге.

Затем конструкция яе1есг проектирует элемент на нужный формат, создавая и возвращая экземпляр анонимного типа. Кан только элемент возвращен из конструкции яе1есс, работа перечислителя завершена до тех пор, пока курсор переменной запроса не будет перемещен на следующем шаге итерации. На заметку! Выражения запросов Ь(Н0 могут использоваться повторно. Например, предположим, что начата итерация по результатам выршкения запроса. Далее представим, что после того, как переменная диапазона прошла итерацию по нескольким элементам входной коллекции, переменная, ссылающаяся на коллекцию, изменилась и теперь указывает на другую коллекцию.

Выполнение итерации по тому же запросу может быть продолжено, при этом будут получаться измененные данные из новой входной коллекции без необходимости заново переопределять запрос. Как такое возможно? Подсказка: подумайте о замыканиях и захвате переменных, а также о том, что происходит, если захваченная переменная модифицируется за пределами контекста замыкания. Ниспровержение лени В предыдущем разделе из выражения запроса была удалена конструкция огг(егЬу, и мог возникнуть вопрос, почему.

Дело в том, что некоторые операции запросов мешают "ленивому" вычислению. В конце концов, может ли огг(егЬу выполнить свою работу, не получив полные результаты от предшествующих конструкций? Разумеется, нет, и потому огг)егЬу заставляет предшествующие ей конструкции выполнять всю итерацию до конца. На заметку! огг(егЬу — не единственная конструкция, которая отменяет "ленивое", или отложенное, выполнение выражений запроса, дгопр...Ьу и 101п делают то же самое, Вдобавок всякий раз, когда выполняется вызов расширяющего метода на переменной запроса, порождающей одиночное значение (в противоположность результату 1еповегзь1е<т>), такого как Соолг, весь запрос должен пройти всю итерацию до конца. 544 Глава ) 6 Первоначальное выражение запроса из раздела "Выражения запросов" выглядело так: чат диету = Егов евр1оуее Еп евр1оуеев ииете евр1оуее.за1агу > 100000 огс)егЬу евр1оуее.гаатиаве, евр1оуее.У1гатпаве ве1ест пеи ( Ьавтнаве = евр1оуее.ьаятнаве, рьтвткаве = евр1оуее.рьгятнаве Сопяо1е.нгттеЬЕпе( "Высокооппачизаеиые сотрудники:" Еогеаси( чаг Етев Еп пиесу ) ( Сопво1е.нгьтеььпе( "(О), (1)", Етев.ьавтнаве, 1тев.р1гятнаве ); Конструкцию отс1етЬу здесь выделена полужирным.

При запросе следующего элемента в результирующем наборе конструкция Етов посылает следующий элемент евр1оуеея в фильтр ипеге. Если элемент проходит фильтр, ои дальше отправляется конструкции огс(егЬу. Однако теперь конструкция огс)етЬу должна видеть остальную часть входной информации, прошедшей фильтр, поэтому она возвращает выполнение обратно конструкции Егов, чтобы получить следующий элемент, прошедший фильтрацию. Зтот цикл продолжается до тех пор, пока в коллекции евр1оуеев не остается элементов. Затем, после упорядочивания элементов на основе указанного критерия, первый элементупорядоченногонабора отправляетсяпроектору ве1ест. Когда Еотеасп запрашивает следующий элемент результирующего набора, вычислениеначинается с конструкции о тс(е гЬ у, поскольку все результаты предыдущих конструкций уже кэшированы. Следующий элемент извлекается из внутреннего кэша и передается проектору яе1ест.

Зто продолжается до тех пор, пока потребитель переменной диапазона не переберет все результаты, опустошая кэш, сформированный отс(етЬу. Ранее упоминался случай, когда переменная диапазона в выражении выполняет итерацию по бесконечному циклу. Рассмотрим следующий пример: ив1по Яувтеаи ив1пч Яуятев.ььпс(с ияьпч Яуятев.Со11естьопя.пепег1сс риЫЕс с1аяв 1пгтпьтеььят ( ятатьс 1ВпиветаЫе<ьпт> А111птечетв() ( Епт соипт = 0; иЫ1е( итие ) ( у1е1с( гетигп соипт+ас втагьс чоьб Маьп() ( чаг Чиету = Егов пивЬег ьп А111пведетв () ве1есе пиввег а 2 + 1) Еогеась( чаг Етев Еп с(нету.тате(10) ) ( Сопяо1е.кг1теььпе( 1тев )с ) Обратите внимание на выделенное полужирным выражение запроса.

Оно осуществляет вызов А111птеоегв, который просто является итератором по всем целым числам, начиная с нуля. Конструкция яе1ест проектирует эти целые числа на все нечетные. Затем с использованием тате и цикла Еогеасп отображаются первые десять нечетных ЬХЧО: язык интегрированных запросов 545 чисел. Если бы не использовался метод таке, программа работала бы бесконечно, если только она не компилировалась с включенной опцией /снесхеб+ для обнаружения переполнений.

На заметку! Методы, создающие итераторы для бесконечных множеств, подобные А111пгедегз из предыдущего примера, иногда называют потоками (зтгеагпзр Классы 0иегуаЬ1е и ЕпцгзегаЬ1е также содержат полезные методы, генерирующие конечные коллекции. К ним относится еиргу, возвращающий пустое множество элементов, Аапде, возвращающий последовательность чисел, и еереащ который генерирует повторяющийся поток константных объектов на основе переданного ему объекта и количества. Хотелось бы, чтобы еереаг выполнял бесконечную итерацию при передаче ему отрицательного числа. Посмотрим, что произойдет, если слегка изменить выражение запроса: чаг оиегу = Ггои пшпЬег Тп А111птесегз П огоегЬу повьет Оезсепсгпд зе1ест пзиЬег * 2 ч 1; Если попытаться выполнить итерацию по этой переменной запроса хотя бы один раз для получения первого результата, нужно приготовиться к тому, чтобы прервать эту программу.

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

Немедленное выполнение запросов Иногда возникает необходимость выполнить весь запрос незамедлительно. Возможно, требуется локально кэшировать результаты запроса в памяти или минимизировать длительность блокировки базы данных ЗЯЬ.

Это можно сделать двумя способами. Можно немедленно после запроса запустить цикл Тогеасн, который выполнит итерацию по переменной запроса, помещая результат в Ь1зт <т>. Но это чересчур императивный прием! Не лучше ли сделать это функциональноу Можно вызвать расширяющий метод То11зс на переменной запроса, что даст тот же результат за один-единственный вызов метода. Как и с примером оггтегЬу из предыдущего раздела, будьте осторожны при вызове Тоьззт на запросе, возвращающем бесконечный результирующий набор. Существует также расширяющий метод ТоАггау, предназначенный для преобразования результатов в массив. В разделе "Замена операторов Тогеасн" далее в главе будет приведен интересный пример применения ТЬАггау.

Наряду с Тоь1з Г, существуют и другие расширяющие методы, которые активизируют немедленное выполнение всего запроса. К ним относятся такие методы, как Соопг, яом, Мах, Мзп. Ачегзде, Ьазщ Еечегзе, а также прочие методы, которые должны выполнять весь запрос для производства результата. Еще раз о деревьях выражений В главе 15 было описано, как лямбда-выражения могут быть преобразованы в деревья выражений. Также кратко упоминалось о том, что это очень полезно для Ь1НЯ то ЗЯЬ.

Характеристики

Тип файла
DJVU-файл
Размер
8,22 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Нэш Трей - C# 2010
Accelerated_C_2010-4565
3_syntax_overview
3_generics_1.cs
as_1.cs
boxing.cs
conversions_1.cs
implicit_type_1.cs
is_1.cs
references_1.cs
references_2.cs
references_3.cs
values_1.cs
4_classes_structs
4_abstract_classes_1.cs
4_beforefieldinit_1.cs
4_box_1.cs
4_box_2.cs
4_box_3.cs
4_box_4.cs
4_box_5.cs
4_class_definition_1.cs
4_compareto_1.cs
4_containment_example_1.cs
4_containment_example_2.cs
4_containment_example_3.cs
4_ctor_struct_1.cs
4_ctor_struct_2.cs
4_ctor_struct_3.cs
4_destructor_1.cs
4_destructor_2.cs
Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7057
Авторов
на СтудИзбе
258
Средний доход
с одного платного файла
Обучение Подробнее