文字列の補間は、既存のコードベースの文字列Format呼び出しに適用すると本当にいいですが、一般的に好ましい列の制限を考えると、文字列は1行では急速に長くなりすぎることがわかりました。特に、補間される式が複雑な場合。フォーマット文字列を使用すると、複数の行に分割できる変数のリストがあります。
var str = string.Format("some text {0} more text {1}",
obj1.property,
obj2.property);
誰かがこれらの行を分割する好ましい方法を持っていますか?
次のようなことができると思います:
var str = $"some text { obj1.property }" +
" more text { obj2.property };
can行を複数の行に分割しますが、構文がこれ以上ナイスに見えるとは言いません。
補間されたverbatim文字列を使用するには$@
構文を使用する必要があり、次のように{...}
パラメーター内に改行を配置できます。
string s = $@"This is all {
10
} going to be one long {
DateTime.Now
} line.";
上記の文字列には改行は含まれず、実際には次のようなコンテンツが含まれます。
これはすべて、2015年8月1日23.49.47の長い1行になります。
(注意、ノルウェーの形式)
さて、そう言ったところで、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}"
例として、オーバーライドされたToString()内でStringBuilderを使用しました。
// 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();
}