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

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

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

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

4 года назад
Открыть в
День 1448. #ЗаметкиНаПолях Обзор Новых Функций C# 11. Продолжение Начало Продолжим обзор функциональности работы со строками. 2. Разрывы строк во встроенных выражениях (включено в релиз) В C# 11 добавлено небольшое усовершенствование в способ обработки разрывов строк во встроенных выражениях при интерполяции. В C# 10 вы не могли разрывать строку внутри фигурных скобок:
var text =
  $"Всего {people.Count} человек";

Это ограничение было просто побочным эффектом предыдущей реализации компилятора. В нём не было строгой необходимости. Выражения с разрывами строк компилируются без ошибок в C# 11:
var text =
  $"Всего {students.Count 
    + teachers.Count} человек";

3. Строки UTF-8 (включено в упрощённом виде) C# 11 дает нам новый суффикс переменной u8, который указывает использовать кодировку UTF-8 для строкового литерала:
var utf8 = "HEAD/HTTP/1.1"u8;

Важно понимать, что этот код не создаёт строку. Строки C# используют кодировку UTF-16, и создание совершенно нового пользовательского строкового типа данных UTF-8 было бы излишним. Вместо этого создаётся экземпляр объекта ReadOnlySpan<byte>. Это в основном пригодится, если вы взаимодействуете с веб-протоколом (он почти всегда использует UTF-8) и хотите избежать накладных расходов на написание такого кода:
string utf16 = "HEAD / HTTP/1.1";
byte[] utf8 = Encoding.UTF8.GetBytes(utf16);

Кроме того, вы должны получить ошибку времени компиляции при попытке присвоить u8 строке символы, которые не представлены в UTF8:
var utf8data = "Special chars:\uD801\uD802"u8;
Этот код выдаст ошибку CS9026: The input string cannot be converted into the equivalent UTF-8 byte representation. Unable to translate Unicode character \uD801 at index 14 to specified code page. (Входная строка не может быть преобразована в эквивалентное байтовое представление UTF-8. Невозможно преобразовать символ Unicode \uD801 на позиции 14 в указанную кодовую страницу.) Стоит отметить, что обсуждалась идея использовать неявное преобразование, чтобы следующий код мог работать:
byte[] utf8data = "HEAD / HTTP/1.1";
Но это не было включено в релиз. Продолжение следует… Источник: https://medium.com/young-coder/a-mostly-complete-guide-to-c-11s-final-features-d43e6c9aa727