Выбор ответа Senior Строки обновлено
Интерполяция строк в .NET 6+
Вопрос
Что изменилось в работе $"..." начиная с C# 10 и .NET 6?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Интерполяция идёт через DefaultInterpolatedStringHandler без упаковки. Раньше $"x={x}" превращался в string.Format с упаковкой int в object.
Варианты ответа
- Интерполяция идёт через
DefaultInterpolatedStringHandlerбез упаковкиправильный ответ - Интерполяция теперь вычисляется во время компиляции для любых аргументов
- Строки после интерполяции автоматически интернируются для экономии памяти
- Интерполяция стала ленивой и вычисляется при первом чтении строки
Разбор
Раньше $"x={x}" превращался в string.Format с упаковкой int в object. С C# 10 компилятор использует обработчик DefaultInterpolatedStringHandler: значения добавляются через дженерик AppendFormatted<T> без упаковки, буфер берётся из ArrayPool. Логгеры и StringBuilder.Append могут принимать свои обработчики и вообще не форматировать строку, если она не нужна. Во время компиляции сворачиваются только интерполяции из констант-строк. Автоматического интернирования и ленивости нет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «Строки»
- Как правильно сравнивать строки без учёта регистра
- Ordinal и культурное сравнение строк
- Почему += в цикле медленно
- Словарь с ключами без учёта регистра
- Почему строки неизменяемы
- Что делает Replace со строкой
- Палиндром без учёта регистра и знаков
- Слова в обратном порядке