37

私はこれがうまくいくことを知っています:

string multiline_text = @"this is a multiline text
this is line 1
this is line 2
this is line 3";

次の作業を行うにはどうすればよいですか。

string a1 = " line number one";
string a2 = " line number two";
string a3 = " line number three";

string multiline_text = @"this is a multiline text
this is " + a1 + " 
this is " + a2 + " 
this is " + a3 + ";

文字列を各行に 1 つずつ、いくつかの部分文字列に分割せずに可能ですか?

4

7 に答える 7

96

1 つのオプションは、代わりに文字列の書式設定を使用することです。C# 6 より前:

string pattern = @"this is a multiline text
this is {0}
this is {1}
this is {2}";

string result = string.Format(pattern, a1, a2, a3);

C# 6 では、補間されたそのままの文字列リテラルを使用できます。

string pattern = $@"this is a multiline text
this is {a1}
this is {a2}
this is {a3}";

$@を使用しようとする@$と、コンパイルされません。

于 2013-04-24T15:10:36.850 に答える
5

StringBuilderクラスから次のような可読性を得ることができます。

StringBuilder sb = new StringBuilder();
sb.AppendLine("this is a multiline");
sb.AppendLine("this is " + a1); // etc

var result = sb.ToString();
于 2013-04-24T15:11:11.853 に答える
4

Visual Studio 2015 では、次のように記述できます。

string multiline_text = $@"this is a multiline text
this is {a1}
this is {a2}
this is {a3}";

String.Format はコンパイラによって使用されます (Jons answer のように) が、読みやすいです。

于 2015-12-09T23:43:19.670 に答える
0

面白いことに、配列の結合手法を使用して、読み取り可能なものを取得し、インデントを制御することもできます。完全に左揃えにする必要がある複数行のテンプレートが見苦しい場合があります...

string a1 = "London", a2 = "France", a3 = "someone's underpants";

string result = string.Join(Environment.NewLine, new[] {
    $"this is {a1}", // interpolated strings look nice
    "this is " + a2, // you can concat if you can't interpolate
    $"this is {a3}"  // these in-line comments can be nice too
});

書式を設定する必要がある場合は、個々の行ではなく、結合をラップして整然とした結果にします。

于 2018-02-27T22:41:45.310 に答える