Обложка канала

.NET Разработчик

Опытный разработчик не так давно зашёл в .Net и поставил цель получить сертификат Microsoft. Свой ежедневный прогресс он описывает на канале .Net Разработчик. Заметки об изученном материале, советы по повышению производительности и поддержке мотивации, ин

.NET Разработчик

4 года назад
Открыть в
День 1128. #ЧтоНовенького Новые Функции C#11 Команда .NET уже начала работу над функциями, которые будут включены в C# 11 и .NET 7. Сегодня рассмотрим некоторые из них. 1. Усовершенствования интерполированных строк В настоящее время поддерживается два типа интерполированных строк: - Обычная интерполяция: $"" - Дословная интерполяция: $@"" Основное отличие состоит в том, что дословно интерполированные строки могут содержать несколько строк, и экранировать нужно только кавычки. В обычных интерполированных строках для новой строки нужно использовать спец символы /r/n. Теперь в обычных интерполированных строках можно будет использовать что-то вроде:
var v =
  $"Результат: { this.Is.Something()
                  .That.I.Should(
                    be + able)[
                     to.Wrap()] }.";

2. Шаблоны списков Они позволят нам сравнивать с массивами и списками, иметь возможность сопоставлять различные элементы или даже включать шаблоны, которые соответствуют нулю или более элементам. Например, под шаблон [1, 2, .., 10] подходят все следующие массивы:
int[] arr1 = { 1, 2, 10 };
int[] arr2 = { 1, 2, 5, 10 };
int[] arr3 = { 1, 2, 5, 6, 7, 8, 9, 10 };

3. Проверка параметра на null Эта новая функция создана из-за того, что стандартный код проверки параметра на null встречается слишком часто:
public static void M(string s)
{
  if (s is null)
    throw new ArgumentNullException(nameof(s));
  // …
}

Теперь мы сможем использовать сокращённую запись с помощью !!:
public static void M(string s!!)
{
  // …
}

Это также может быть использовано для проверки параметров индексаторов:
public string this[string key!!] 
 { get { ... } set { ... } }

В конструкторах эта функция будет действовать немного по-другому. Проверка параметров конструктора на null с помощью !! будет происходить после инициализаторов полей, однако до вызова конструктора базового класса. То есть:
public record Base(int len);
public record Derived(string s!!)
 : Base(s.Length);
При передаче null в конструктор Derived, будет выброшено ArgumentNullException из класса Derived, а не NullReferenceException из класса Base. Если мы применим !! к имени параметра обнуляемого ссылочного типа, компилятор выдаст предупреждение:
void WarnCase<T>(
  string? name!!,
  // CS8995 Nullable type 'string?' is null-checked and will throw if null
  // (Обнуляемый тип 'string?' проверяется на null и выбросит исключение при null)
  T value1!! // OK
)

Источник: dev.to/dotnets…ind-3o7h