So verketten Sie mehrere Zeichenfolgen (C#-Anleitung)
Verkettung ist der Prozess des Anhängens einer Zeichenfolge an das Ende einer anderen Zeichenfolge. Sie verketten Zeichenfolgen mit dem Operator +
. Bei Zeichenfolgenliteralen und Zeichenfolgenkonstanten erfolgt die Verkettung beim Kompilieren. Es erfolgt keine Verkettung zur Laufzeit. Bei Zeichenfolgenvariablen erfolgt die Verkettung nur zur Laufzeit.
Anmerkung
Die C#-Beispiele in diesem Artikel werden in der Inlinecodeausführung und dem Playground von Try.NET ausgeführt. Klicken Sie auf die Schaltfläche Ausführen, um ein Beispiel in einem interaktiven Fenster auszuführen. Nachdem Sie den Code ausgeführt haben, können Sie ihn ändern und den geänderten Code durch erneutes Anklicken der Schaltfläche Ausführen ausführen. Der geänderte Code wird entweder im interaktiven Fenster ausgeführt, oder, wenn die Kompilierung fehlschlägt, zeigt das interaktive Fenster alle C#-Compilerfehlermeldungen an.
Zeichenfolgenliterale
Im folgenden Beispiel wird ein langes Zeichenfolgenliteral in kleinere Zeichenfolgen aufgeteilt, um die Lesbarkeit im Quellcode zu verbessern. Der Code verkettet die kleineren Zeichenfolgen, um das lange Zeichenfolgenliteral zu erstellen. Die Teile werden zur Kompilierzeit zu einer einzelnen Zeichenfolge verkettet. Es entstehen unabhängig von der Anzahl an Zeichenfolgen keine Leistungseinbußen zur Laufzeit.
// 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);
+
und +=
Operatoren
Um Zeichenfolgenvariablen zu verketten, können Sie die Operatoren +
oder +=
, Zeichenfolgeninterpolation oder die String.Format, String.Concat, String.Join oder StringBuilder.Append Methoden verwenden. Der +
-Operator ist einfach zu bedienen und sorgt für intuitiven Code. Auch wenn Sie mehrere +
Operatoren in einem Befehl verwenden, wird der Zeichenketteninhalt nur einmal kopiert. Der folgende Code zeigt Beispiele für die Verwendung der Operatoren +
und +=
zum Verketten von Zeichenfolgen:
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);
Zeichenfolgeninterpolierung
In einigen Ausdrücken ist es einfacher, Zeichenfolgen mithilfe der Zeichenfolgeninterpolation zu verketten, wie der folgende Code zeigt:
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);
Anmerkung
Bei Zeichenfolgenverkettungsvorgängen behandelt der C#-Compiler eine NULL-Zeichenfolge wie eine leere Zeichenfolge.
Sie können die Zeichenfolge-Interpolation verwenden, um eine konstante Zeichenfolge zu initialisieren, wenn alle für Platzhalter verwendeten Ausdrücke ebenfalls konstante Zeichenfolgen sind.
String.Format
Eine andere Methoden zum Verketten von Zeichenfolgen ist String.Format. Diese Methode funktioniert gut, wenn Sie eine Zeichenfolge mit einer kleinen Anzahl von Zeichenfolgenkomponenten erstellen.
StringBuilder
In anderen Fällen können Sie Zeichenfolgen in einer Schleife kombinieren, in der Sie nicht wissen, wie viele Quellzeichenfolgen Sie kombinieren, und die tatsächliche Anzahl der Quellzeichenfolgen kann groß sein. Die StringBuilder-Klasse wurde für diese Szenarien entwickelt. Der folgende Code verwendet die Append-Methode der StringBuilder-Klasse, um Zeichenfolgen zu verketten.
// 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());
Erfahren Sie mehr über die Gründe für das Verketten von Zeichenfolgen oder die StringBuilder
-Klasse.
String.Concat
oder String.Join
Eine weitere Option zum Verketten von Zeichenfolgen aus einer Sammlung ist die Verwendung der Methode String.Concat. Verwenden Sie die Methode String.Join, wenn ein Trennzeichen die Quellzeichenfolgen trennen soll. Der folgenden Code kombiniert ein Array aus Wörtern mithilfe beider Methoden:
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 und Enumerable.Aggregate
Die letzte Option zum Verketten von Zeichenfolgen aus einer Sammlung ist die Verwendung von LINQ und der Methode Enumerable.Aggregate. Diese Methode kombiniert die Quellzeichenfolgen mithilfe eines Lambdaausdrucks. Der Lambdaausdruck fügt jede Zeichenfolge der vorhandenen Akkumulation zu. Im folgenden Beispiel wird ein Array von Wörtern kombiniert, wobei ein Leerzeichen zwischen jedem Wort im Array hinzugefügt wird:
string[] words = { "The", "quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog." };
var phrase = words.Aggregate((partialPhrase, word) =>$"{partialPhrase} {word}");
System.Console.WriteLine(phrase);
Diese Option kann mehr Zuordnungen verursachen als andere Methoden zum Verketten von Auflistungen, da sie eine Zwischenzeichenfolge für jede Iteration erstellt. Wenn die Optimierung der Leistung von entscheidender Bedeutung ist, sollten Sie die Klasse StringBuilder
oder die Methode String.Concat
oder String.Join
zur Verkettung einer Sammlung anstelle von Enumerable.Aggregate
verwenden.