C# 6 предоставляет компилятору поддержку интерполированных строковых литералов с синтаксисом:
var person = new { Name = "Bob" };
string s = $"Hello, {person.Name}.";
Это отлично подходит для коротких строк, но если вы хотите создать более длинную строку, нужно ли указывать ее в одной строке?
С другими типами строк вы можете:
var multi1 = string.Format(@"Height: {0}
Width: {1}
Background: {2}",
height,
width,
background);
Or:
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();
Или есть что-то более изящное?