Многострочная строка с добавлением текста из переменных

Я знаю, что это сработает:

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. Это, вероятно, не все, что уместно, но стоит упомянуть.