Многострочная строка с добавлением текста из переменных
Я знаю, что это сработает:
string multiline_text = @"this is a multiline text
this is line 1
this is line 2
this is line 3";
Как я могу выполнить следующую работу:
string a1 = " line number one";
string a2 = " line number two";
string a3 = " line number three";
string multiline_text = @"this is a multiline text
this is " + a1 + "
this is " + a2 + "
this is " + a3 + ";
Возможно ли без разделения строки на несколько подстрок, по одной для каждой строки?
Ответы
Ответ 1
Один вариант - вместо этого использовать форматирование строк. Перед С# 6:
string pattern = @"this is a multiline text
this is {0}
this is {1}
this is {2}";
string result = string.Format(pattern, a1, a2, a3);
С С# 6 вы можете использовать интерполированный строковый строковый литерал:
string pattern = [email protected]"this is a multiline text
this is {a1}
this is {a2}
this is {a3}";
Обратите внимание, что [email protected]
должно быть именно таким: если вы попытаетесь использовать @$
, он не будет компилироваться.
Ответ 2
Вы можете получить удобочитаемость из этого класса StringBuilder
:
StringBuilder sb = new StringBuilder();
sb.AppendLine("this is a multiline");
sb.AppendLine("this is " + a1); // etc
var result = sb.ToString();
Ответ 3
Хотя string.Format
является лучшей практикой, чтобы сделать то, что вы пытаетесь достичь, просто добавьте дополнительный @
в конце каждой строки:
string multiline_text = @"this is a multiline text
this is " + a1 + @"
this is " + a2 + @"
this is " + a3 + @"";
Вам также не удалось пропустить последний "
перед окончанием в двоеточие.
Ответ 4
С Visual Studio 2015 вы можете написать:
string multiline_text = [email protected]"this is a multiline text
this is {a1}
this is {a2}
this is {a3}";
String.Format будет использоваться компилятором (как в ответе Джонса), но его легче читать.
Ответ 5
По какой-то причине С# не поддерживает многострочный текст. самое близкое, что вы получите:
string a1 = " line number one";
string a2 = " line number two";
string a3 = " line number three";
string multiline_text = @"this is a multiline text" +
"this is " + a1 +
"this is " + a2 +
"this is " + a3;
Ответ 6
Другим возможным решением, которое идет по линии ответа Джона Скита, является следующее:
string result = string.Format(
"this is a multiline text{0}this is {1}{0}this is {2}{0}this is {3}",
Environment.NewLine, a1, a2, a3);
и поэтому в основном вы вставляете новую строку, в которой вы хотите использовать {0}
. Из-за этого строка становится немного абстрактной, но преимущество этого решения заключается в том, что он полностью инкапсулирован в метод string.Format
. Это, вероятно, не все, что уместно, но стоит упомянуть.