方法: 複数の文字列を連結する (C# ガイド)How to: Concatenate Multiple Strings (C# Guide)

連結とは、ある文字列を別の文字列の末尾に追加するプロセスです。Concatenation is the process of appending one string to the end of another string. 文字列を連結するには、+ 演算子を使用します。You concatenate strings by using the + operator. 文字列リテラルと文字列定数の場合、連結はコンパイル時に行われ、実行時には行われません。For string literals and string constants, concatenation occurs at compile time; no run-time concatenation occurs. 文字列変数の連結は実行時にのみ行われます。For string variables, concatenation occurs only at run time.

注意

この記事の C# 例は、Try.NET インライン コード ランナーとプレイグラウンドで実行されます。The C# examples in this article run in the Try.NET inline code runner and playground. [実行] ボタンを選択すると、対話型ウィンドウで例が実行されます。Select the Run button to run an example in an interactive window. コードを実行したら、コードを変更し、 [実行] をもう一度選択して変更後のコードを実行できます。Once you execute the code, you can modify it and run the modified code by selecting Run again. 変更後のコードが対話型ウィンドウで実行されるか、コンパイルできなかった場合、対話型ウィンドウにすべての C# コンパイラ エラー メッセージが表示されます。The modified code either runs in the interactive window or, if compilation fails, the interactive window displays all C# compiler error messages.

次の例では、ソース コードを読みやすくするために、連結を使用して長い文字列リテラルを短い文字列に分割しています。The following example uses concatenation to split a long string literal into smaller strings in order to improve readability in the source code. これらの部分は、コンパイル時に単一の文字列に連結されます。These parts are concatenated into a single string at compile time. 関係する文字列の数に関係なく、実行時にパフォーマンス コストは発生しません。There is no run-time performance cost regardless of the number of strings involved.

// Concatenation of literals is performed at compile time, not run time.
string text = "Historically, the world of data and the world of objects " +
"have not been well integrated. Programmers work in C# or Visual Basic " +
"and also in SQL or XQuery. On the one side are concepts such as classes, " +
"objects, fields, inheritance, and .NET Framework APIs. On the other side " +
"are tables, columns, rows, nodes, and separate languages for dealing with " +
"them. Data types often require translation between the two worlds; there are " +
"different standard functions. Because the object world has no notion of query, a " +
"query can only be represented as a string without compile-time type checking or " +
"IntelliSense support in the IDE. Transferring data from SQL tables or XML trees to " +
"objects in memory is often tedious and error-prone.";

System.Console.WriteLine(text);

文字列変数を連結する場合は、+ または += 演算子、文字列補間または String.FormatString.ConcatString.JoinStringBuilder.Append メソッドを使用できます。To concatenate string variables, you can use the + or += operators, string interpolation or the String.Format, String.Concat, String.Join or StringBuilder.Append methods. + 演算子は使い方が簡単で、直感的なコードにすることができます。The + operator is easy to use and makes for intuitive code. 1 つのステートメントで複数の + 演算子を使用している場合でも、文字列の内容がコピーされるのは 1 回のみです。Even if you use several + operators in one statement, the string content is copied only once. 次のコードは、+ および += 演算子を使用して文字列を連結する例を示しています。The following code shows examples of using the + and += operators to concatenate strings:

string userName = "<Type your name here>";
string dateString = DateTime.Today.ToShortDateString();

// Use the + and += operators for one-time concatenations.
string str = "Hello " + userName + ". Today is " + dateString + ".";
System.Console.WriteLine(str);

str += " How are you today?";
System.Console.WriteLine(str);

式によっては、次のコードに示すように、文字列補間を使用して文字列を連結する方が簡単な場合があります。In some expressions, it's easier to concatenate strings using string interpolation, as the following code shows:

string userName = "<Type your name here>";
string date = DateTime.Today.ToShortDateString();

// Use string interpolation to concatenate strings.
string str = $"Hello {userName}. Today is {date}.";
System.Console.WriteLine(str);

str = $"{str} How are you today?";
System.Console.WriteLine(str);

注意

文字列連結操作において、C# コンパイラでは null 文字列は空の文字列と同様に扱われます。In string concatenation operations, the C# compiler treats a null string the same as an empty string.

文字列を連結する他のメソッドとして、String.Format があります。Other method to concatenate strings is String.Format. このメソッドは、少数のコンポーネント文字列から文字列を作成する場合に有効です。This method works well when you are building a string from a small number of component strings.

他にも、ループ内の文字列を結合する場合があります。このケースでは、結合するソース文字列の数はわからず、ソース文字列の実際の数は非常に大きくなる可能性があります。In other cases you may be combining strings in a loop, where you don't know how many source strings you are combining, and the actual number of source strings may be quite large. StringBuilder クラスは、このようなシナリオのために設計されています。The StringBuilder class was designed for these scenarios. 次のコードでは、StringBuilder クラスの Append メソッドを使用して文字列を連結しています。The following code uses the Append method of the StringBuilder class to concatenate strings.

// Use StringBuilder for concatenation in tight loops.
var sb = new System.Text.StringBuilder();
for (int i = 0; i < 20; i++)
{
    sb.AppendLine(i.ToString());
}
System.Console.WriteLine(sb.ToString());

文字列の連結または StringBuilder クラスを選択する理由に関するページで詳細をご確認ください。You can read more about the reasons to choose string concatenation or the StringBuilder class

コレクションからの文字列を結合する別のオプションとして、String.Concat メソッドを使用する方法があります。Another option to join strings from a collection is to use String.Concat method. ソース文字列を区切り記号で区切る必要がある場合は、String.Join メソッドを使用します。Use String.Join method if source strings should be separated by a delimeter. 次のコードでは、両方のメソッドを使用して単語の配列を結合します。The following code combines an array of words using both methods:

string[] words = { "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog." };

var unreadablePhrase = string.Concat(words);
System.Console.WriteLine(unreadablePhrase);

var readablePhrase = string.Join(" ", words);
System.Console.WriteLine(readablePhrase);

最後に、LINQ および Enumerable.Aggregate メソッドを使用して、コレクションからの文字列を結合できます。At last, you can use LINQ and the Enumerable.Aggregate method to join strings from a collection. このメソッドは、ラムダ式を使用してソース文字列を結合します。This method combines the source strings using a lambda expression. ラムダ式は、各文字列を既存の蓄積に追加する処理を行います。The lambda expression does the work to add each string to the existing accumulation. 次の例では、配列内の各単語の間にスペースを追加することによって単語の配列を結合します。The following example combines an array of words by adding a space between each word in the array:

string[] words = { "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog." };

var phrase = words.Aggregate((partialPhrase, word) =>$"{partialPhrase} {word}");
System.Console.WriteLine(phrase);

GitHub リポジトリのコードを見て、これらのサンプルを試すことができます。You can try these samples by looking at the code in our GitHub repository. または、サンプルを zip ファイルとしてダウンロードすることができます。Or you can download the samples as a zip file.

関連項目See also