Я обнаружил, что, хотя строковая интерполяция действительно хороша при применении к вызовам формата строки моей существующей базы кода, учитывая обычно предпочтительный предел столбца, строка быстро становится слишком длинной для одной строки. Особенно, когда интерполируемые выражения сложные. Со строкой формата у вас есть список переменных, который можно разделить на несколько строк.
var str = string.Format("some text {0} more text {1}",
obj1.property,
obj2.property);
У кого-нибудь есть какие-нибудь предпочтительные способы разбить эти строки?
Я полагаю, вы могли бы сделать что-то вроде:
var str = $"some text { obj1.property }" +
" more text { obj2.property };
$""
которая работает как@""
$"some text { obj1.property }" + " more text { obj2.property }";
не делает того, что вы думаете. Только первая половина этого выражения является интерполированной строкой; он затем объединяется с , не -interpolated строка буквального" more text { obj2.property }"
Ответы:
Вы можете разбить строку на несколько строк, но я бы не сказал, что синтаксис выглядит красиво.
Вам нужно использовать
$@
синтаксис для использования интерполированной дословной строки, и вы можете помещать символы новой строки внутри{...}
параметров, например:Вышеупомянутая строка не будет содержать никаких символов новой строки и фактически будет иметь такое содержимое:
(примечание, норвежский формат)
Теперь, сказав это, я бы не перестал употреблять
string.Format
. На мой взгляд, некоторые из этих выражений строковой интерполяции выглядят действительно хорошо, но более сложные из них начинают становиться очень трудными для чтения. Учитывая, что, если вы не используетеFormattableString
, код вString.Format
любом случае будет скомпилирован в вызов , я бы сказал, продолжайте идтиString.Format
туда, где это имеет смысл.источник
FormattableString
, что этоString.Format
тоже сводится к звонку .$@""
синтаксис!FormattableString.Invarian($"Hello {name}" + \n "are you the owner of {pet}?");
потому что он объединяет две интерполированные строки в одну простую строку.> var name = "Simon"; var templateName = "How to interpolate a verbatim string"; var now = DateTime.UtcNow;. var output = $@"Hi {name}, This template is a demo of {templateName}. It was ran at {now.ToString("o")}"; > output
, На выходе получается"Hi Simon,\r\nThis template is a demo of How to interpolate a verbatim string.\r\n\r\nIt was ran at 2020-01-24T15:49:35.6678353Z"
Вы можете комбинировать
$
и@
вместе, чтобы получить строковую интерполяцию и многострочный строковый литерал:Но это даст вам
NewLine
промежуточный персонаж, так что это может быть не то, что вам нужно.источник
$@"
в Visual Studio, вы должны начинать каждую новую строку с левого края текстового редактора.Хотя OP просил что-то еще, я ожидаю, что многие люди, читающие этот вопрос, захотят, чтобы многострочный интерполированный
$""
, работающий как@""
. Для этого используйте$@""
источник
Это оно:
Обратите внимание на второе
$
в$"..." + $"..."
источник
FormattableString
приведение к объединенной строке?В качестве примера я использовал StringBuilder в переопределенном ToString ().
источник
buffer.AppendFormat("{0}Number: {1}", Environment.NewLine, EmployeeNumber);
???