方法 : 複数の文字列を連結する (C# プログラミング ガイド)

更新 : 2008 年 7 月

連結とは、ある文字列を別の文字列の末尾に追加するプロセスです。+ 演算子を使用してリテラル文字列または文字列定数を連結すると、コンパイラにより単一の文字列が作成されます。連結は実行時には行われません。ただし、文字列変数は実行時にのみ連結できます。さまざまな方法のパフォーマンスへの影響を理解する必要があります。

使用例

ソース コードの読みやすさを改善するために、長いリテラル文字列を短い文字列に分割する方法を次の例に示します。これらの部分は、コンパイル時に単一の文字列に連結されます。含まれる文字列の数は、実行時のパフォーマンスには影響しません。

static void Main()
{
    // 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.";

    Console.WriteLine(text);
}

文字列変数を連結するには、+ 演算子、+= 演算子、String.Concat メソッド、String.Format メソッド、または StringBuilder.Append メソッドを使用します。+ 演算子は使用しやすく、直観的なコードの作成に役立ちますが、連続して動作するため、使用するたびに新しい文字列が作成されます。そのため、複数の演算子を連結するのは非効率です。たとえば次のようなコードがあるとします。

static void Main(string[] args)
{
    // To run this program, provide a command line string.
    // In Visual Studio, see Project > Properties > Debug.
    string userName = args[0];
    string date = DateTime.Today.ToShortDateString();

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

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

    // Keep the console window open in debug mode.
    Console.WriteLine("Press any key to exit.");
    Console.ReadKey();
}

// Example output: 
//  Hello Alexander. Today is 1/22/2008.
//  Hello Alexander. Today is 1/22/2008. How are you today?
//  Press any key to exit.
//
ms228504.alert_note(ja-jp,VS.90).gifメモ :

文字列連結において、C# コンパイラは null 文字列を空の文字列と同じものとして処理しますが、元の null 文字列値の変換は行いません。

多数の文字列を連結しない場合 (たとえば、ループで)、このコードのパフォーマンスへの影響は通常は大きくありません。String.Concat メソッドと String.Format メソッドについても同様です。

ただし、パフォーマンスを重視する場合、常に StringBuilder クラスを使用して文字列を連結する必要があります。次のコード例では、+ 演算子の連結効果を使用せず、StringBuilder クラスの Append メソッドを使用して文字列を連結します。

class StringBuilderTest
{
    static void Main()
    {
        string text = null;

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

        // Keep the console window open in debug mode.
        System.Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();
    }
}
// Output:
// 0
// 1
// 2
// 3
// 4
// ...
//

参照

概念

C# プログラミング ガイド

参照

文字列 (C# プログラミング ガイド)

String

StringBuilder

履歴の変更

日付

履歴

理由

2008 年 7 月

新しいトピックを追加

情報の拡充