Tip
この記事は、少なくとも 1 つのプログラミング言語を既に知っており、C# を学習している開発者向けの 基礎 セクションの一部です。 プログラミングを初めて使用する場合は、最初に「 はじめ に」チュートリアルから始めてください。
別の言語から来ていますか? C# での + を使った連結は、Java や JavaScript と同様です。 C# は、変数から文字列を構築する場合に推奨される方法として、JavaScript テンプレート リテラルや Python f 文字列と同様に、文字列補間 ($"{x}") を追加します。 ループ内で文字列を構築する場合、C# では、JavaのStringBuilderと同様に、StringBuilderが提供されます。
連結 では、1 つの文字列が別の文字列の末尾に追加され、新しい文字列が生成されます。 C# では複数の連結方法が提供されます。最適な選択は、固定された値のセットまたはコレクションを結合するか、ループ内で文字列を 1 つずつ構築するかによって異なります。
文字列リテラルを連結する
文字列リテラルまたは定数を + と連結すると、コンパイラはコンパイル時にそれらを結合します。 長いリテラルを複数の行に分割すると、実行時コストなしでソースの読みやすさが向上します。
// The compiler joins adjacent string literals at compile time,
// so splitting a long literal across lines has no run-time cost.
string message =
"This is the first sentence of a longer message. " +
"This is the second sentence. " +
"This is the third and final sentence.";
Console.WriteLine(message);
// => This is the first sentence of a longer message. This is the second sentence. This is the third and final sentence.
+演算子と+=演算子を使用する
文字列変数を結合するには、 + 演算子を使用して新しい文字列を生成するか、既存の文字列に追加する += します。
+演算子は直感的で、1 つの式で複数の演算子を連結した場合でも、コンパイラは文字列の内容を 1 回だけコピーします。
string name = "Alex";
string day = "Monday";
// Use + to build a string from variables and literals.
string greeting = "Hello " + name + ". Today is " + day + ".";
Console.WriteLine(greeting);
// => Hello Alex. Today is Monday.
// Use += to append to an existing string.
greeting += " How are you today?";
Console.WriteLine(greeting);
// => Hello Alex. Today is Monday. How are you today?
Note
文字列連結では、C# は null 文字列を空の文字列と同じように扱うので、 null 連結すると結果に何も追加されません。
文字列補間を使用する
文字列に式の評価結果を埋め込むには、{0} や {1} トークンのような位置プレースホルダーではなく、C スタイルの書式設定から String.Format が継承した文字列補間を使用することをお勧めします。 補間では、各式がその値が表示される場所にインラインで配置されるため、結果の文字列は読み取り可能なままであり、引数を誤って配置することはできません。
string name = "Alex";
string day = "Monday";
// String interpolation reads better than a chain of + operators.
string greeting = $"Hello {name}. Today is {day}.";
Console.WriteLine(greeting);
// => Hello Alex. Today is Monday.
すべての補間式がそれ自体が定数文字列である場合は、補間された結果を const 文字列に割り当てることができます。
文字列のコレクションを結合する
コレクションの要素を結合するには、 String.Concat を使用して区切り記号なしで結合するか、 String.Join を使用して各要素の間に区切り記号を配置します。
string[] words = ["The", "quick", "brown", "fox"];
// Concat joins the sequence with no separator.
string runTogether = string.Concat(words);
Console.WriteLine(runTogether);
// => Thequickbrownfox
// Join places a separator between each element.
string sentence = string.Join(' ', words);
Console.WriteLine(sentence);
// => The quick brown fox
string.Join は、コンマ区切り値やスペース区切りの単語など、区切られた出力が必要な場合に最適なツールです。
ループ内に文字列を作成する
文字列は不変であるため、各 + または += 操作によって新しい文字列が作成されます。 ループに多数の部分を追加すると、その割り当てが加算されます。
StringBuilder クラスは、代わりに 1 つのバッファーで結果をビルドします。
// StringBuilder builds a string in place, which suits loops
// that append many pieces.
var builder = new StringBuilder();
for (int i = 1; i <= 3; i++)
{
builder.AppendLine($"Line {i}");
}
Console.Write(builder.ToString());
// => Line 1
// => Line 2
// => Line 3
要素数が多い場合や、コンパイル時点で不明な場合は、StringBuilder を使用します。 固定の小さな値セットの場合、 + 演算子と文字列補間がより明確になります。 各アプローチが最適に実行されるタイミングのガイダンスについては、「stringとStringBuilderの種類」を参照してください。
こちらも参照ください
.NET