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

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

Книгу Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен читаем онлайн бесплатно полную версию! Чтобы начать читать не надо регистрации. Напомним, что читать онлайн вы можете не только на компьютере, но и на андроид (Android), iPhone и iPad. Приятного чтения!

178 0 18:04, 26-08-2023
Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен
26 август 2023

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

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

    1 ... 167 168 169 170 171 172 173 174 175 ... 407
    Перейти на страницу:
    ключевое слово var. Вспомните из главы 3, что неявно типизированные переменные не могут применяться для определения параметров, возвращаемых значений, а также полей класса или структуры.

    Итак, вполне вероятно, вас интересует, каким образом возвратить результат запроса внешнему коду. Ответ: в зависимости от обстоятельств. Если у вас есть результирующий набор, состоящий из строго типизированных данных, такой как массив строк или список List<T> объектов Car, тогда вы могли бы отказаться от использования ключевого слова var и указать подходящий тип IEnumerable<T> либо IEnumerable (т.к. IEnumerable<T> расширяет IEnumerable). Ниже приведен пример класса Program в новом проекте консольного приложения по имени LinqRetValues:

    using System;

    using System.Collections.Generic;

    using System.Linq;

    Console.WriteLine("***** LINQ Return Values *****n");

    IEnumerable<string> subset = GetStringSubset();

    foreach (string item in subset)

    {

      Console.WriteLine(item);

    }

    Console.ReadLine();

    static IEnumerable<string> GetStringSubset()

    {

      string[] colors = {"Light Red", "Green", "Yellow", "Dark Red", "Red", "Purple"};

      // Обратите внимание, что subset является

      // совместимым с IEnumerable<string> объектом.

      IEnumerable<string> theRedColors =

         from c in colors where c.Contains("Red") select c;

      return theRedColors;

    }

    Результат выглядит вполне ожидаемо:

    Light Red

    Dark Red

    Red

    Возвращение результатов LINQ посредством немедленного выполнения

    Рассмотренный пример работает ожидаемым образом только потому, что возвращаемое значение GetStringSubset() и запрос LINQ внутри этого метода были строго типизированными. Если применить ключевое слово var для определения переменной subset, то возвращать значение будет разрешено, только если метод по-прежнему прототипирован с возвращаемым типом IEnumerable<string> (и если неявно типизированная локальная переменная на самом деле совместима с указанным возвращаемым типом).

    Поскольку оперировать с типом IEnumerable<T> несколько неудобно, можно задействовать немедленное выполнение. Скажем, вместо возвращения IEnumerable<string> можно было бы возвратить просто string[] при условии трансформации последовательности в строго типизированный массив. Именно такое действие выполняет новый метод класса Program:

    static string[] GetStringSubsetAsArray()

    {

      string[] colors = {"Light Red", "Green",

                         "Yellow", "Dark Red", "Red", "Purple"};

      var theRedColors = from c in colors where c.Contains("Red") select c;

      // Отобразить результаты в массив.

      return theRedColors.ToArray();

    }

    В таком случае вызывающий код совершенно не знает, что полученный им результат поступил от запроса LINQ, и просто работает с массивом строк вполне ожидаемым образом. Вот пример:

    foreach (string item in GetStringSubsetAsArray())

    {

      Console.WriteLine(item);

    }

    Немедленное выполнение также важно при попытке возвратить вызывающему коду результаты проецирования LINQ. Мы исследуем эту тему чуть позже в главе. А сейчас давайте посмотрим, как применять запросы LINQ к обобщенным и необобщенным объектам коллекций.

    Применение запросов LINQ к объектам коллекций

    Помимо извлечения результатов из простого массива данных выражения запросов LINQ могут также манипулировать данными внутри классов из пространства имен System.Collections.Generic, таких как List<T>. Создайте новый проект консольного приложения по имени ListOverCollections и определите базовый класс Car, который поддерживает текущую скорость, цвет, производителя и дружественное имя:

    namespace LinqOverCollections

    {

      class Car

      {

        public string PetName {get; set;} = "";

        public string Color {get; set;} = "";

        public int Speed {get; set;}

        public string Make {get; set;} = "";

      }

    }

    Теперь определите внутри операторов верхнего уровня локальную переменную типа List<T> для хранения элементов типа Car и с помощью синтаксиса инициализации объектов заполните список несколькими новыми объектами Car:

    using System;

    using System.Collections;

    using System.Collections.Generic;

    using System.Linq;

    using LinqOverCollections;

    Console.WriteLine("***** LINQ over Generic Collections *****n");

    // Создать список List<> объектов Car.

    List<Car> myCars = new List<Car>() {

      new Car{ PetName = "Henry", Color = "Silver", Speed = 100, Make = "BMW"},

      new Car{ PetName = "Daisy", Color = "Tan", Speed = 90, Make = "BMW"},

      new Car{ PetName = "Mary", Color = "Black", Speed = 55, Make = "VW"},

      new Car{ PetName = "Clunker", Color = "Rust", Speed = 5, Make = "Yugo"},

      new Car{ PetName = "Melvin", Color = "White", Speed = 43, Make = "Ford"}

    };

    Console.ReadLine();

    Доступ к содержащимся в контейнере подобъектам

    Применение запроса LINQ к обобщенному контейнеру ничем не отличается от такого же действия в отношении простого массива, потому что LINQ to Objects может использоваться с любым типом, реализующим интерфейс IEnumerable<T>. На этот раз цель заключается в построении выражения запроса для выборки из списка myCars только тех объектов Car, у которых значение скорости больше 55.

    После получения подмножества на консоль будет выведено имя каждого объекта Car за счет обращения к его свойству PetName. Предположим, что определен следующий вспомогательный метод (принимающий параметр List<Car>), который вызывается в операторах верхнего уровня:

    static void GetFastCars(List<Car> myCars)

    {

      // Найти в List<> все объекты Car, у которых значение Speed больше 55.

      var fastCars = from c in myCars where c.Speed > 55 select c;

      foreach (var car in fastCars)

      {

        Console.WriteLine("{0} is going too fast!", car.PetName);

      }

    }

    Обратите внимание, что выражение запроса захватывает из List<T> только те элементы, у которых значение Speed больше 55. Запустив приложение, вы увидите, что критерию поиска отвечают только два элемента — Нenry и Daisy.

    Чтобы построить более сложный запрос, можно искать только автомобили марки BMW со значением Speed больше 90. Для этого нужно просто создать составной булевский оператор с применением операции && языка С#:

    static void GetFastBMWs(List<Car> myCars)

      {

      // Найти быстрые автомобили BMW!

      var fastCars = from c in myCars

          where c.Speed > 90 && c.Make == "BMW" select c;

      foreach

    1 ... 167 168 169 170 171 172 173 174 175 ... 407
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

    Прочитали книгу? Предлагаем вам поделится своим отзывом от прочитанного(прослушанного)! Ваш отзыв будет полезен читателям, которые еще только собираются познакомиться с произведением.


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

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

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


    Установить VPN и читай слушай бесплатно

    Новые отзывы

    1. Борис Борис14 июнь 00:50 Колокола в России тем и отличались от западных что раскачиаали именно язык колокола,а не сам колокол! Авторы что-жертвы ЕГЭ? Не... Соединенные Штаты России 3 - Полина Ром
    2. Людмила Хофман Людмила Хофман10 июнь 22:13 У меня перевернулся мир после прочтения ваших книг! Так приятно и чисто на душе, ведь по сути неважно кто с кем , а только любовь... Долгая игра - Рейчел Рид
    3. Анна Анна08 июнь 11:28 Спасибо за новую историю жизни и любви на сайте,прочитала с удовольствием .... Давай поженимся - Юлия Резник
    Все комметарии
    Новинки бесплатной онлайн библиотеки