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

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

На нашем литературном портале можно бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю, Троелсен Эндрю . Жанр: Базы данных. Онлайн библиотека дает возможность прочитать весь текст и даже без регистрации и СМС подтверждения на нашем литературном портале litmir.org.
Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
Название: Язык программирования C#9 и платформа .NET5
Дата добавления: 22 август 2024
Количество просмотров: 236
Читать онлайн

Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних просмотр данного контента СТРОГО ЗАПРЕЩЕН! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту readbookfedya@gmail.com для удаления материала

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

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

В 10-м издании книги описаны новейшие возможности языка C# 9 и .NET 5 вместе с подробным "закулисным" обсуждением, призванным расширить навыки критического мышления разработчиков, когда речь идет об их ремесле.

Книга охватывает ASP.NET Core, Entity Framework Core и многое другое наряду с последними обновлениями унифицированной платформы .NET, начиная с улучшений показателей производительности настольных приложений Windows в .NET 5 и обновления инструментария XAML и заканчивая расширенным рассмотрением файлов данных и способов обработки данных.

Все примеры кода были переписаны с учетом возможностей последнего выпуска C# 9.

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

Item: System Shock 2

Item: Uncharted 2

Решение с использованием расширяющих методов

Применяемый ранее (и далее в главе) синтаксис LINQ называется выражениями запросов LINQ, которые представляют собой формат, похожий на SQL, но слегка отличающийся от него. Существует еще один синтаксис с расширяющими методами, который будет использоваться в большинстве примеров в настоящей книге. Создайте новый метод по имени QueryOverStringsWithExtensionMethods() со следующим кодом:

static void QueryOverStringsWithExtensionMethods()

{

  // Пусть имеется массив строк.

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

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

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

  // Построить выражение запроса для поиска

  // в массиве элементов, содержащих пробелы.

<b>  IEnumerable&lt;string&gt; subset =</b>

<b>    currentVideoGames.Where(g =&gt; g.Contains(&quot; &quot;))</b>

<b>                           .OrderBy(g =&gt; g).Select(g =&gt; g);</b>

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

  foreach (string s in subset)

  {

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

  }

}

Код здесь тот же, что и в предыдущем методе, кроме строк, выделенных полужирным. В них демонстрируется применение синтаксиса расширяющих методов, в котором для определения операций внутри каждого метода используются лямбда-выражения. Например, лямбда-выражение в методе Where() определяет условие (содержит ли значение пробел). Как и в синтаксисе выражений запросов, используемая для идентификации значения буква произвольна; в примере применяется v для видеоигр (video game).

Хотя результаты аналогичны (метод дает такой же вывод, как и предыдущий метод, использующий выражение запроса), вскоре вы увидите, что тип результирующего набора несколько отличается. В большинстве (если фактически не во всех) сценариях подобное отличие не приводит к каким-либо проблемам и форматы могут применяться взаимозаменяемо.

Решение без использования LINQ

Конечно, применение LINQ никогда не бывает обязательным. При желании идентичный результирующий набор можно получить без участия LINQ с помощью таких программных конструкций, как операторы if и циклы for. Ниже приведен метод, который выдает тот же самый результат, что и QueryOverStrings(), но в намного более многословной манере:

static void QueryOverStringsLongHand()

{

  // Предположим, что имеется массив строк.

  string[] currentVideoGames = {&quot;Morrowind&quot;, &quot;Uncharted 2&quot;,

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

                                &quot;Fallout 3&quot;, &quot;Daxter&quot;, &quot;System Shock 2&quot;};

  string[] gamesWithSpaces = new string[5];

  for (int i = 0; i &lt; currentVideoGames.Length; i++)

  {

    if (currentVideoGames[i].Contains(&quot; &quot;))

    {

      gamesWithSpaces[i] = currentVideoGames[i];

    }

  }

  // Отсортировать набор.

  Array.Sort(gamesWithSpaces);

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

  foreach (string s in gamesWithSpaces)

  {

    if( s != null)

    {

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

    }

  }

  Console.WriteLine();

}

Несмотря на возможные пути улучшения метода QueryOverStringsLongHand(), факт остается фактом — запросы LINQ способны радикально упростить процесс извлечения новых подмножеств данных из источника. Вместо построения вложенных циклов, сложной логики if/else, временных типов данных и т.п. компилятор С# сделает всю черновую работу, как только вы создадите подходящий запрос LINQ.

Выполнение рефлексии результирующего набора LINQ

А теперь определите в классе Program дополнительный вспомогательный метод по имени ReflectOverQueryResults(), который выводит на консоль разнообразные детали о результирующем наборе LINQ (обратите внимание на параметр типа System.Object, позволяющий учитывать множество типов результирующих наборов):

static void ReflectOverQueryResults(object resultSet,

                                    string queryType = &quot;Query Expressions&quot;)

{

  Console.WriteLine($&quot;***** Info about your query using {queryType} *****&quot;);

  // Вывести тип результирующего набора

  Console.WriteLine(&quot;resultSet is of type: {0}&quot;, resultSet.GetType().Name);

  // Вывести местоположение результирующего набора

  Console.WriteLine(&quot;resultSet location: {0}&quot;,

                     resultSet.GetType().Assembly.GetName().Name);

}

Перейти на страницу:
Комментариев (0)