Sdílet prostřednictvím


Postupy: Řetězení více řetězců (Průvodce programováním v C#)

Zřetězení je proces přidávání jeden řetězec na konec jiného řetězce.Když pomocí zřetězit řetězcové literály nebo Řetězcové konstanty + operátor, kompilátor vytvoří jeden řetězec.Ne spuštění dojde k zřetězení.Proměnné řetězce však možné spojit pouze v době spuštění.V tomto případě je třeba porozumět výkonu důsledky různých přístupů.

Příklad

Následující příklad ukazuje, jak rozdělit dlouhý řetězec literálu řetězce menší ke zlepšení čitelnosti ve zdrojovém kódu.Tyto části budou zřetězeny do jednoho řetězce v době kompilace.Ne je spustit čas výkon bez ohledu na počet řetězců související náklady.

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);
}

Chcete-li zřetězit proměnné řetězce, můžete + nebo += operátory, nebo String.Concat, String.Format nebo StringBuilder.Append metody.+ Operátor je snadná a intuitivní kódu.I když použijete několik + operátory na výkazu, obsah řetězce zkopírován pouze jednou.Ale pokud několikrát opakujte tuto operaci například ve smyčce, ji může způsobit problémy účinnosti.Všimněte si například následující kód:

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. 
//

[!POZNÁMKA]

Operace zřetězení řetězce kompilátor C# zpracuje nulový řetězec stejné jako prázdný řetězec, ale nepřevede hodnotu původní řetězec null.

Pokud není zřetězení velkého počtu řetězce (například ve smyčce), je pravděpodobně významné náklady výkonu tohoto kódu.Totéž platí pro String.Concat a String.Format metod.

Však při výkonu je důležité, je třeba použít StringBuilder třídy zřetězení řetězců.Následující kód používá Append metodu StringBuilder třídy zřetězení řetězců bez řetězené účinku + operátor.

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 
// ... 
//

Viz také

Referenční dokumentace

String

StringBuilder

Koncepty

Průvodce programováním v C#

Další zdroje

Řetězce (Průvodce programováním v C#)