Строки интерполяции длинной строки в С# 6
Я обнаружил, что, хотя интерполяция строк действительно хороша при применении к моей существующей строковой строке кода. Форматирование вызовов, учитывая, как правило, предпочтительный предел столбца, строка быстро становится слишком длинной для одной строки. Особенно, когда интерполированные выражения сложны. С строкой формата у вас есть список переменных, которые можно разбить на несколько строк.
var str = string.Format("some text {0} more text {1}",
obj1.property,
obj2.property);
Есть ли у кого-нибудь какие-либо предпочтительные способы разбить эти строки?
Я полагаю, вы могли бы сделать что-то вроде:
var str = $"some text { obj1.property }" +
" more text { obj2.property };
Ответы
Ответ 1
Вы можете разбить строку на несколько строк, но я бы не сказал, что синтаксис выглядит приятнее.
Вам нужно использовать синтаксис [email protected]
, чтобы использовать интерполированную строку verbatim, и вы можете поместить строки новой строки внутри параметров {...}
, например:
string s = [email protected]"This is all {
10
} going to be one long {
DateTime.Now
} line.";
Строка, указанная выше, не будет содержать новых строк и будет иметь такой контент:
Это все 10 будет одной длинной линии 01.08.2015 23.49.47.
(примечание, норвежский формат)
Теперь, сказав это, я не перестану использовать string.Format
. На мой взгляд, некоторые из этих строковых интерполяционных выражений выглядят действительно хорошо, но более сложные из них становятся очень трудными для чтения. Учитывая, что, если вы не используете FormattableString
, код будет скомпилирован в вызов string.Format
, я бы сказал, продолжайте идти с string.Format
, где это имеет смысл.
Ответ 2
Вы можете объединить $
и @
вместе, чтобы получить интерполяцию строк и многострочный строковый литерал:
var str = [email protected]"some text { obj1.property }
more text { obj2.property }";
Но это даст вам символ NewLine
между ними, поэтому может быть не так, как вы хотите.
Ответ 3
OP попросил что-то еще, но я ожидаю, что многие люди, читающие этот вопрос, хотели бы использовать многострочный интерполированный $""
, который работает как @""
. Для этого используйте [email protected]""
[email protected]"Height: {height}
Width: {width}
Background: {background}"
Ответ 4
Я использовал StringBuilder в переопределенном ToString() в качестве примера.
// return employee data
public override string ToString()
{
StringBuilder buffer = new StringBuilder();
buffer.AppendLine($"Number: {EmployeeNumber}");
buffer.AppendLine($"Name: {EmployeeName}");
buffer.AppendLine($"Address: {PostalAddress}");
buffer.AppendLine($"Phone: {PhoneNumber}");
buffer.AppendLine($"Age: {EmployeeAge}");
buffer.AppendLine($"Gender: {EmployeeGender}");
buffer.AppendLine($"Status: {EmployeeStatus}");
buffer.AppendLine($"Manager: {EmployeeManager}");
buffer.AppendLine($"Start: {EmployeeStartDate.ToShortDateString()}");
return buffer.ToString();
}
Ответ 5
Это он:
var str = $"some text { obj1.property }" +
$" more text { obj2.property }";
Обратите внимание на второй $
в $"..." + $"..."