Выбор ответа Senior Строки обновлено

Интерполяция строк в .NET 6+

Вопрос

Что изменилось в работе $"..." начиная с C# 10 и .NET 6?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Интерполяция идёт через DefaultInterpolatedStringHandler без упаковки. Раньше $"x={x}" превращался в string.Format с упаковкой int в object.

Варианты ответа

  1. Интерполяция идёт через DefaultInterpolatedStringHandler без упаковкиправильный ответ
  2. Интерполяция теперь вычисляется во время компиляции для любых аргументов
  3. Строки после интерполяции автоматически интернируются для экономии памяти
  4. Интерполяция стала ленивой и вычисляется при первом чтении строки

Разбор

Раньше $"x={x}" превращался в string.Format с упаковкой int в object. С C# 10 компилятор использует обработчик DefaultInterpolatedStringHandler: значения добавляются через дженерик AppendFormatted<T> без упаковки, буфер берётся из ArrayPool. Логгеры и StringBuilder.Append могут принимать свои обработчики и вообще не форматировать строку, если она не нужна. Во время компиляции сворачиваются только интерполяции из констант-строк. Автоматического интернирования и ленивости нет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.