TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.77K subscribers
Post #1394 2.06K
День 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
)

Источник: https://dev.to/dotnetsafer/c-11-is-coming-5-features-that-will-blow-your-mind-3o7h
  • 👍 9
More from @netdeveloperdiary
  1. Oct 15, 2026Post #3374
  2. Oct 14, 2026Post #3373
  3. Oct 13, 2026День 2813. #ЗаметкиНаПолях #Async Ещё Раз Про Async/Await в C#. Часть 1 Почему существует…
  4. Oct 12, 2026День 2812. #Карьера #AI Как Разработчикам Оставаться Полезными, Когда Код Пишет ИИ? По мер…
  5. Oct 11, 2026День 2811. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
  6. Oct 10, 2026День 2810. #ЧтоНовенького #VSCode Более Быстрый и Лёгкий C# Dev Kit Мы, разработчики, люби…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →