TGViewer
IRON PROGRAMMER IRON PROGRAMMER @csharp_publics · 3.04K subscribers
Post #2342 1.14K
Присваивание объединения со значением NULL

У нас скоро (очень скоро) выйдет курс по нововведениям языка C# – PRO C#. Эволюция языка. Хочу вас ввести в курс дела. Я считаю каждый уважающий себя C# разработчик должен знать историю развития своего главного инструмента для написания программ - язык C#.

Расскажу об одной прикольной фиче из C# 11 версии.

Начнем как всегда с проблемы😉
В C# работа со строками может быть связана с трудностями при необходимости использования многострочных строк и строк с экранированными символами, такими как кавычки или обратные слэши. Например, работа с JSON, XML или SQL-запросами внутри кода требует тщательной экранизации символов, что может сделать код менее читаемым и более сложным для поддержки.

Рассмотрим пример, в котором требуется создать JSON-строку с вложенными кавычками и переносами строк:
string jsonString = "{\n\"name\": \"John\",\n\"age\": 30\n}";
Console.WriteLine(jsonString);
// {
// "name": "John",
// "age": 30
// }

Такой код не только выглядит громоздко, но и трудно читается, особенно при увеличении сложности строки.

До появления C# 11 одним из распространённых способов решения этой проблемы могло стать использование строковых литералов с экранированием символов и конкатенацией строк:
string jsonString = "{\n" +
" \"name\": \"John\",\n" +
" \"age\": 30\n" +
"}";

Хотя этот метод решает проблему создания многострочных строк, он всё ещё имеет ряд недостатков:
– Необходимость экранирования специальных символов (например, \n для переноса строки, \" для кавычек).
– Ухудшение читаемости кода из-за конкатенации строк и экранированных символов.
– Сложности при редактировании таких строк.

Решение
С выходом C# 11 появилась новая возможность — необработанные строковые литералы, которые значительно упрощают работу с многострочными строками и строками, содержащими специальные символы. Необработанные строковые литералы заключаются в тройные кавычки """.

Перепишем пример с использованием необработанных строковых литералов:
string jsonString = """
{
"name": "John",
"age": 30
}
""";

Console.WriteLine(jsonString);
// {
// "name": "John",
// "age": 30
// }

Очевидно, что такой подход имеет ряд преимуществ:
– Не нужно экранировать специальные символы.
– Многострочные строки поддерживаются напрямую.
– Читаемость кода значительно улучшается.

Также стоит отметить, что необработанные строковые литералы поддерживают интерполяцию. Несколько символов $ обозначают, сколько последовательных скобок начинают и завершают интерполяцию. Использование нескольких символов $ в необработанных строковых литералах необходимо для корректной интерполяции строк с фигурными скобками, например, для JSON-строки с интерполяцией.

Для указания того, что интерполяцию начинают и заканчивают 2 фигурные скобки необходимо использовать $$""", например:
string name = "John";
int age = 30;
string jsonString = $$"""
{
"name": "{{name}}",
"age": {{age}}
}
""";

Console.WriteLine(jsonString);


Вот такую приколюшку завезли в C#, чтобы нам с вами легче было писать читаемый и чистый код☺️

Как вам? Знали про такую фичу?

❤️ — если знали о такой фиче
👀 — если узнали о нем впервые

#полезные_материалы #эволюция_языка
  • 👀 21
  • ❤ 4
More from @csharp_publics
  1. Oct 17, 2026Post #3177
  2. Oct 16, 2026Не зря полтора дня угробил на это 🥹 Если не прочитали, очень советую. Я привел примеры из…
  3. Oct 15, 2026Как менялся pattern matching в C#. Пять версий на примерах Прошел все версии от C# 7 до C#…
  4. Oct 15, 2026Post #3174
  5. Oct 13, 2026Как восстановить доступ к курса пока Stepik недоступен🙏 Stepik сейчас недоступен, но твоё…
  6. Oct 13, 2026Stepik недоступен уже 4 дня Причина: многие сервисы, включая наши, хостятся на серверах Ян…
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 →