web-dev-qa-db-ja.com

C#6の長い文字列補間線

文字列の補間は、既存のコードベースの文字列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 };
108
Jeremiah Gowdy

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文字を与えるので、あなたが望むものではないかもしれません。

52
MarcinJuraszek

OPは何か他のものを求めましたが、この質問を読んでいる多くの人は、$""のように機能する複数行の補間@""を望んでいます。そのためには、$@""を使用します

$@"Height: {height}
Width: {width}
Background: {background}"
15
Colonel Panic

例として、オーバーライドされた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();
    }