Длинные строки интерполяции в C#6
я обнаружил, что, хотя строковая интерполяция действительно хороша при применении к вызовам строкового формата моей существующей кодовой базы, учитывая обычно предпочтительный предел столбца, строка быстро становится слишком длинной для одной строки. Особенно, когда интерполируемые выражения являются сложными. С помощью строки формата у вас есть список переменных, которые можно разделить на несколько строк.
var str = string.Format("some text {0} more text {1}",
obj1.property,
obj2.property);
есть ли у кого-нибудь предпочтительный способ разбить эти линии?
I полагаю, вы могли бы сделать что-то вроде:
var str = $"some text { obj1.property }" +
" more text { obj2.property };
5 ответов:
вы можете разбить строку на несколько строк, но я бы не сказала, что синтаксис выглядит больше.
вы должны использовать
$@
синтаксис для использования интерполированное дословно строка, и вы можете разместить новые строки внутри{...}
параметры, например:string s = $@"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
где это имеет смысл.
вы можете комбинировать
$
и@
вместе, чтобы получить строковую интерполяцию и многострочный строковый литерал:var str = $@"some text { obj1.property } more text { obj2.property }";
но это даст вам
NewLine
символ между ними, так что это может быть не то, что вы хотите.
OP попросил что-то еще, но я ожидаю, что многие люди, читающие этот вопрос, Хотели бы многострочную интерполяцию
$""
, работающий@""
. Для этого используйте$@""
$@"Height: {height} Width: {width} Background: {background}"
я использовал 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(); }