Найти в Дзене
.Net Review

C# 8.0. Что нового?

Подробнее о самых интересных обновлениях в C Sharp 8.0 в этой статье. Больше удобного синстаксиса Возможность сопоставления шаблонов позволяет работать с шаблонами в зависимости от формата в связанных, но различных типах данных. В C Sharp 7.0 появился синтаксис для шаблонов типа и шаблонов константы, использующий выражение is и инструкцию switch. Эти функции представляют первые пробные шаги на пути к поддержке парадигм программирования, где данные и функции разделены. Выражения switch: Здесь представлено несколько улучшений синтаксиса: Асинхронные потоки Начиная с C Sharp версии 8.0 можно создавать и использовать потоки асинхронно. В методе, который возвращает асинхронный поток, есть три свойства: Для использования асинхронного потока требуется добавить ключевое слово await перед ключевым словом foreach при перечислении элементов потока. Для добавления ключевого слова await требуется, чтобы метод, который перечисляет асинхронный поток, был объявлен с помощью модификатора async и возвр
Оглавление

Подробнее о самых интересных обновлениях в C Sharp 8.0 в этой статье.

Больше удобного синстаксиса

Возможность сопоставления шаблонов позволяет работать с шаблонами в зависимости от формата в связанных, но различных типах данных. В C Sharp 7.0 появился синтаксис для шаблонов типа и шаблонов константы, использующий выражение is и инструкцию switch. Эти функции представляют первые пробные шаги на пути к поддержке парадигм программирования, где данные и функции разделены.

Выражения switch:

-2

Здесь представлено несколько улучшений синтаксиса:

  • Переменная расположена перед ключевым словом switch. Другой порядок позволяет визуально легко отличить выражение switch от инструкции switch.
  • Элементы case и : заменяются на =>. Это более лаконично и интуитивно понятно.
  • Случай default заменяется пустой переменной _.
  • Тексты являются выражениями, а не инструкциями.

Асинхронные потоки

Начиная с C Sharp версии 8.0 можно создавать и использовать потоки асинхронно. В методе, который возвращает асинхронный поток, есть три свойства:

  • Он объявлен с помощью модификатора async.
  • Он возвращает интерфейс IAsyncEnumerable<T>.
  • Метод содержит инструкции yield return для возвращения последовательных элементов в асинхронном потоке.

Для использования асинхронного потока требуется добавить ключевое слово await перед ключевым словом foreach при перечислении элементов потока. Для добавления ключевого слова await требуется, чтобы метод, который перечисляет асинхронный поток, был объявлен с помощью модификатора async и возвращал тип, допустимый для метода async. Обычно это означает возвращение структуры Task или Task<TResult>. Это также может быть структура ValueTask или ValueTask<TResult>. Метод может использовать и создавать асинхронный поток. Это означает, что будет возвращен интерфейс IAsyncEnumerable<T>.

-3

Индексы и диапазоны

Диапазоны и индексы обеспечивают лаконичный синтаксис для доступа к отдельным элементам или диапазонам в последовательности.

Поддержка языков опирается на два новых типа и два новых оператора:

  • System.Index представляет индекс в последовательности.
  • Оператор ^ (индекс с конца), который указывает, что индекс указан относительно конца последовательности.
  • System.Range представляет вложенный диапазон последовательности.
  • Оператор диапазона .., который задает начало и конец диапазона в качестве своих операндов.

Начнем с правил для использования в индексах. Рассмотрим массив sequence. Индекс 0 совпадает с sequence[0]. Индекс ^0 совпадает с sequence[sequence.Length]. Обратите внимание, что sequence[^0] создает исключение так же, как и sequence[sequence.Length]. Для любого числа n индекс ^n совпадает с sequence.Length - n.

Диапазон указывает начало и конец диапазона. Начало диапазона включается, а окончание — исключается, то есть start входит в диапазон, а end — не входит. Диапазон [0..^0] представляет весь диапазон так же, как [0..sequence.Length] представляет весь диапазон.

-4

Индексы и диапазоны поддерживаются не только массивами. Кроме того, можно использовать индексы и диапазоны со строкой (Span<T> или ReadOnlySpan<T>).

Присваивание объединения со значением NULL

В C Sharp 8.0 появился оператор присваивания объединения со значением NULL ??=. Оператор ??= можно использовать для присваивания значения правого операнда левому операнду только в том случае, если левый операнд принимает значение null.

-5

Другое

Также были введены/обновлены: readonly члены, методы интерфейса по умолчанию, объявление using, статические локальные методы, неуправляемые сконструированные типы, выражение stackalloc во вложенных выражениях, улучшение интерполированных строк.

Телеграмм канал: https://t.me/dotnetreview

Источники: What's new in CSharp 8.0 (Microsoft)