С# 6 предоставляет поддержку компилятора для интерполированных строковых литералов с синтаксисом:
var person = new { Name = "Bob" };
string s = $"Hello, {person.Name}.";
Это отлично подходит для коротких строк, но если вы хотите создать более длинную строку, она должна быть указана в одной строке?
С другими типами строк вы можете:
var multi1 = string.Format(@"Height: {0}
Width: {1}
Background: {2}",
height,
width,
background);
Или:
var multi2 = string.Format(
"Height: {1}{0}" +
"Width: {2}{0}" +
"Background: {3}",
Environment.NewLine,
height,
width,
background);
Я не могу найти способ добиться этого с помощью строковой интерполяции, не имея всего одной строки:
var multi3 = $"Height: {height}{Environment.NewLine}Width: {width}{Environment.NewLine}Background: {background}";
Я понимаю, что в этом случае вы можете использовать \r\n
вместо Environment.NewLine
(менее переносимый) или вытащить его на локальный, но будут случаи, когда вы не можете уменьшить его ниже одной строки без теряя смысловую силу.
Это просто случай, когда строчная интерполяция не должна использоваться для длинных строк?
Должны ли мы просто использовать StringBuilder
для более длинных строк?
var multi4 = new StringBuilder()
.AppendFormat("Width: {0}", width).AppendLine()
.AppendFormat("Height: {0}", height).AppendLine()
.AppendFormat("Background: {0}", background).AppendLine()
.ToString();
Или есть что-то более элегантное?