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 ... 159 160 161 162 163 164 165 166 167 ... 407
    Перейти на страницу:
    консоль чисел 20, 4, 8 и 44.

    Наряду с тем, что такой традиционный подход к работе с делегатами ведет себя ожидаемым образом, IsEvenNumber() вызывается только при ограниченных обстоятельствах — в частности, когда вызывается метод FindAll(), который возлагает на нас обязанность по полному определению метода. Если взамен использовать анонимный метод, то можно превратить это в локальную функцию и код станет значительно чище. Добавьте в класс Program следующий новый метод:

    static void AnonymousMethodSyntax()

    {

      // Создать список целочисленных значений.

      List<int> list = new List<int>();

      list.AddRange(new int[] { 20, 1, 4, 8, 9, 44 });

      // Теперь использовать анонимный метод.

      List<int> evenNumbers =

        list.FindAll(delegate(int i) { return (i % 2) == 0; } );

      // Вывести четные числа

      Console.WriteLine("Here are your even numbers:");

      foreach (int evenNumber in evenNumbers)

      {

        Console.Write("{0}t", evenNumber);

      }

      Console.WriteLine();

    }

    В данном случае вместо прямого создания объекта делегата Predicate<T> и последующего написания отдельного метода есть возможность определить метод как анонимный. Несмотря на шаг в правильном направлении, вам по-прежнему придется применять ключевое слово delegate (или строго типизированный класс Predicate<T>) и обеспечивать точное соответствие списка параметров:

    List<int> evenNumbers = list.FindAll(

      delegate(int i)

      {

        return (i % 2) == 0;

      }

    );

    Для еще большего упрощения вызова метода FindAll() могут использоваться лямбда-выражения. Во время применения синтаксиса лямбда-выражений вообще не приходится иметь дело с лежащим в основе объектом делегата. Взгляните на показанный далее новый метод в классе Program:

    static void LambdaExpressionSyntax()

    {

      // Создать список целочисленных значений.

      List<int> list = new List<int>();

      list.AddRange(new int[] { 20, 1, 4, 8, 9, 44 });

      // Теперь использовать лямбда-выражение С #.

      List<int> evenNumbers = list.FindAll(i => (i % 2) == 0);

      // Вывести четные числа.

      Console.WriteLine("Here are your even numbers:");

      foreach (int evenNumber in evenNumbers)

      {

        Console.Write("{0}t", evenNumber);

      }

      Console.WriteLine();

    }

    Обратите внимание на довольно странный оператор кода, передаваемый методу FindAll(), который на самом деле и представляет собой лямбда-выражение. В такой версии примера нет вообще никаких следов делегата Predicate<T> (или ключевого слова delegate, если на то пошло). Должно указываться только лямбда-выражение:

    i => (i % 2) == 0

    Перед разбором синтаксиса запомните, что лямбда-выражения могут использоваться везде, где должен применяться анонимный метод или строго типизированный делегат (обычно с клавиатурным набором гораздо меньшего объема). "За кулисами" компилятор C# транслирует лямбда-выражение в стандартный анонимный метод, использующий тип делегата Predicate<T> (в чем можно удостовериться с помощью утилиты ildasm.exe). Скажем, следующий оператор кода:

    // Это лямбда-выражение...

    List<int> evenNumbers = list.FindAll(i => (i % 2) == 0);

    компилируется в приблизительно такой код С#:

    // ...становится следующим анонимным методом.

    List<int> evenNumbers = list.FindAll(delegate (int i)

    {

      return (i % 2) == 0;

    });

    Анализ лямбда-выражения

    Лямбда-выражение начинается со списка параметров, за которым следует лексема => (лексема C# для лямбда-операции позаимствована из области лямбда-исчисления), а за ней — набор операторов (или одиночный оператор), который будет обрабатывать передаваемые аргументы. На самом высоком уровне лямбда-выражение можно представить следующим образом:

    АргументыДляОбработки => ОбрабатывающиеОператоры

    То, что находится внутри метода LambdaExpressionSyntax(), понимается так:

    // i — список параметров.

    // (i % 2) == 0 - набор операторов для обработки i

    List<int> evenNumbers = list.FindAll(i => (i % 2) == 0);

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

    // Теперь установим тип параметров явно.

    List<int> evenNumbers = list.FindAll((int i) => (i % 2) == 0);

    Как вы уже видели, если лямбда-выражение имеет одиночный неявно типизированный параметр, то круглые скобки в списке параметров могут быть опущены. Если вы желаете соблюдать согласованность относительно применения параметров лямбда-выражений, тогда можете всегда заключать в скобки список параметров:

    List<int> evenNumbers = list.FindAll((i) => (i % 2) == 0);

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

    // Поместить в скобки и выражение.

    List<int> evenNumbers = list.FindAll((i) => ((i % 2) == 0));

    После ознакомления с разными способами построения лямбда-выражения давайте выясним, как его можно читать в понятных человеку терминах. Оставив чистую математику в стороне, можно привести следующее объяснение:

    // Список параметров (в данном случае единственное целочисленное

    // значение по имени i) будет обработан выражением (i % 2) == 0.

    List<int> evenNumbers = list.FindAll((i) => ((i % 2) == 0));

    Обработка аргументов внутри множества операторов

    Первое рассмотренное лямбда-выражение включало единственный оператор, который в итоге вычислялся в булевское значение. Однако, как вы знаете, многие цели делегатов должны выполнять несколько операторов кода. По этой причине язык C# позволяет строить лямбда-выражения, состоящие из множества операторов, указывая блок кода в стандартных фигурных скобках. Взгляните на приведенную далее модификацию метода LambdaExpressionSyntax():

    static void LambdaExpressionSyntax()

    {

      // Создать список целочисленных значений.

      List<int> list = new List<int>();

      list.AddRange(new int[] { 20, 1, 4, 8, 9, 44 });

      // Обработать каждый аргумент внутри группы операторов кода.

      List<int> evenNumbers = list.FindAll((i) =>

      {

    1 ... 159 160 161 162 163 164 165 166 167 ... 407
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

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


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

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

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


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

    Новые отзывы

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