books-read.com
books-read.com » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Наш ресурс дает возможность бесплатно читать книгу онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю. Жанр: Базы данных . Сайт books-read.com дает возможность читать полную версию книги без регистрации и sms. Все книги онлайн, не надо качать fb2, epub, txt.
Добавить книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю в приложение ЧИТАТЬ КНИГУ ОФЛАЙН в приложении ios/android
Перейти на страницу:

using System.Linq;

static void QueryStringWithOperators()

{

  Console.WriteLine("***** Using Query Operators *****");

  string[] currentVideoGames = {"Morrowind", "Uncharted 2",

                                "Fallout 3", "Daxter", "System
Shock 2"};

  var subset = from game in currentVideoGames

    where game.Contains(" ") orderby game select game;

  foreach (string s in subset)

  {

    Console.WriteLine("Item: {0}", s);

  }

}

Очевидное преимущество использования операций запросов C# при построении выражений запросов заключается в том, что делегаты

Funс<>
и вызовы методов
Enumerable
остаются вне поля зрения и внимания, т.к. выполнение необходимой трансляции возлагается на компилятор С#. Бесспорно, создание выражений LINQ с применением различных операций запросов (
from
,
in
,
where
или
orderby
) является наиболее распространенным и простым подходом.

Построение выражений запросов с использованием типа Enumerable и лямбда-выражений

Имейте в виду, что применяемые здесь операции запросов LINQ представляют собой сокращенные версии вызова расширяющих методов, определенных в типе

Enumerable
. Рассмотрим показанный ниже метод
QueryStringsWithEnumerableAndLambdas()
, который обрабатывает локальный массив строк, но на этот раз в нем напрямую используются расширяющие методы
Enumerable
:

static void QueryStringsWithEnumerableAndLambdas()

{

  Console.WriteLine("***** Using Enumerable / Lambda Expressions *****");

  string[] currentVideoGames = {"Morrowind", "Uncharted 2",

                                "Fallout 3", "Daxter", "System
Shock 2"};

  // Построить выражение запроса с использованием расширяющих методов,

  // предоставленных типу Array через тип Enumerable.

  var subset = currentVideoGames

    .Where(game => game.Contains(" "))

    .OrderBy(game => game).Select(game => game);

  // Вывести результаты.

  foreach (var game in subset)

  {

    Console.WriteLine("Item: {0}", game);

  }

  Console.WriteLine();

}

Здесь сначала вызывается расширяющий метод

Where()
на строковом массиве
currentVideoGames
. Вспомните, что класс
Array
получает данный метод от класса
Enumerable
. Метод
Enumerable.Where()
требует параметра типа делегата
System.Func<T1,TResult>
. Первый параметр типа упомянутого делегата представляет совместимые с интерфейсом
IEnumerable<T>
данные для обработки (массив строк в рассматриваемом случае), а второй — результирующие данные метода, которые получаются от единственного оператора, вставленного в лямбда-выражение.

Возвращаемое значение метода

Where()
в приведенном примере кода скрыто от глаз, но "за кулисами" работа происходит с типом
OrderedEnumerable
. На объекте указанного типа вызывается обобщенный метод
OrderBy()
, который также принимает параметр типа делегата
Func<>
. Теперь производится передача всех элементов по очереди посредством подходящего лямбда-выражения. Результатом вызова
OrderBy()
является новая упорядоченная последовательность первоначальных данных.

И, наконец, осуществляется вызов метода

Select()
на последовательности, возвращенной
OrderBy()
, который в итоге дает финальный набор данных, сохраняемый в неявно типизированной переменной по имени
subset
.

Конечно, такой "длинный" запрос LINQ несколько сложнее для восприятия, чем предыдущий пример с операциями запросов LINQ. Без сомнения, часть сложности связана с объединением в цепочку вызовов посредством операции точки. Вот тот же самый запрос с выделением каждого шага в отдельный фрагмент (разбивать запрос на части можно разными способами):

static void QueryStringsWithEnumerableAndLambdas2()

{

  Console.WriteLine("***** Using Enumerable / Lambda Expressions *****");

  string[] currentVideoGames = {"Morrowind", "Uncharted 2",

                               "Fallout 3", "Daxter", "System
Shock 2"};

  // Разбить на части.

  var gamesWithSpaces =

      currentVideoGames.Where(game => game.Contains(" "));

  var orderedGames = gamesWithSpaces.OrderBy(game => game);

  var subset = orderedGames.Select(game => game);

  foreach (var game in subset)

Перейти на страницу:

Троелсен Эндрю читать все книги автора по порядку

Троелсен Эндрю - на сайте онлайн книг books-read.com Вы можете читать полные версии книг автора в одном месте.


Язык программирования C#9 и платформа .NET5 отзывы

Отзывы читателей о книге Язык программирования C#9 и платформа .NET5, автор: Троелсен Эндрю. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

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

Надеемся на Ваше понимание и благоразумие. С уважением, администратор books-read.com


Прокомментировать
Подтвердите что вы не робот:*