Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
.NET ermöglicht das Erstellen von Zeichenfolgen mithilfe einfacher Zuweisung und überladen auch einen Klassenkonstruktor, um die Zeichenfolgenerstellung mithilfe einer Reihe verschiedener Parameter zu unterstützen. .NET stellt außerdem mehrere Methoden in der System.String Klasse bereit, die neue Zeichenfolgenobjekte erstellen, indem mehrere Zeichenfolgen, Arrays von Zeichenfolgen oder Objekten kombiniert werden.
Erstellen von Zeichenfolgen mithilfe von Zuweisung
Die einfachste Möglichkeit, ein neues String-Objekt zu erstellen, besteht darin, einem String-Objekt ein Literal einer Zeichenfolge einfach zuzuweisen.
Erstellen von Zeichenfolgen mithilfe eines Klassenkonstruktors
Sie können Überladungen des String Klassenkonstruktors verwenden, um Zeichenfolgen aus Zeichenarrays zu erstellen. Sie können auch eine neue Zeichenfolge erstellen, indem Sie ein bestimmtes Zeichen mit einer bestimmten Anzahl von Malen duplizieren. Die String(ReadOnlySpan<Char>) Konstruktorüberladung akzeptiert eine ReadOnlySpan<T> oder ein stapelzugewiesenes Span<T> von Zeichen und verhindert das Zuweisen eines Zwischenzeichenfelds auf dem verwalteten Heap, wenn Sie eine kleine Zeichenfolge einer bekannten Größe erstellen, obwohl die resultierende Zeichenfolgeninstanz weiterhin auf dem verwalteten Heap zugeordnet ist.
Methoden, die Zeichenfolgen zurückgeben
In der folgenden Tabelle sind mehrere nützliche Methoden aufgeführt, die neue Zeichenfolgenobjekte zurückgeben.
| Methodenname | Verwendung |
|---|---|
| String.Format | Erstellt eine formatierte Zeichenfolge aus einer Reihe von Eingabeobjekten. |
| String.Concat | Erstellt Zeichenfolgen aus mindestens zwei Zeichenfolgen. |
| String.Join | Erstellt eine neue Zeichenfolge durch Kombinieren eines Arrays von Zeichenfolgen. |
| String.Insert | Erstellt eine neue Zeichenfolge, indem eine Zeichenfolge in den angegebenen Index einer vorhandenen Zeichenfolge eingefügt wird. |
| String.CopyTo | Kopiert angegebene Zeichen in einer Zeichenfolge an eine angegebene Position in einem Array von Zeichen. |
| String.Create | Erstellt eine neue Zeichenfolge einer angegebenen Länge, füllt die Zeichen mittels eines Rückrufs, der ein beschreibbares Span<T> und ein vom Aufrufer bereitgestelltes Zustandsobjekt empfängt. |
String.Format
Mit der String.Format Methode können Sie formatierte Zeichenfolgen erstellen und Zeichenfolgen verketten, die mehrere Objekte darstellen. Diese Methode konvertiert automatisch alle übergebenen Objekte in eine Zeichenfolge. Wenn Ihre Anwendung beispielsweise einen Int32 Wert und einen DateTime Wert für den Benutzer anzeigen muss, können Sie ganz einfach eine Zeichenfolge erstellen, um diese Werte mithilfe der Format Methode darzustellen. Informationen zu formatierungskonventionen, die mit dieser Methode verwendet werden, finden Sie im Abschnitt " Zusammengesetzte Formatierung".
Im folgenden Beispiel wird die Format Methode verwendet, um eine Zeichenfolge zu erstellen, die eine ganzzahlige Variable verwendet.
int numberOfFleas = 12;
string miscInfo = String.Format("Your dog has {0} fleas. " +
"It is time to get a flea collar. " +
"The current universal date is: {1:u}.",
numberOfFleas, DateTime.Now);
Console.WriteLine(miscInfo);
// The example displays the following output:
// Your dog has 12 fleas. It is time to get a flea collar.
// The current universal date is: 2008-03-28 13:31:40Z.
Dim numberOfFleas As Integer = 12
Dim miscInfo As String = String.Format("Your dog has {0} fleas. " & _
"It is time to get a flea collar. " & _
"The current universal date is: {1:u}.", _
numberOfFleas, Date.Now)
Console.WriteLine(miscInfo)
' The example displays the following output:
' Your dog has 12 fleas. It is time to get a flea collar.
' The current universal date is: 2008-03-28 13:31:40Z.
In diesem Beispiel werden das aktuelle Datum und die aktuelle Uhrzeit in einer Weise angezeigt, die durch die Kultur angegeben wird, DateTime.Now die dem aktuellen Thread zugeordnet ist.
String.Concat
Die String.Concat Methode kann verwendet werden, um problemlos ein neues Zeichenfolgenobjekt aus zwei oder mehr vorhandenen Objekten zu erstellen. Sie bietet eine sprachunabhängige Methode zum Verketten von Zeichenfolgen. Diese Methode akzeptiert jede Klasse, die von System.Object abgeleitet ist. Im folgenden Beispiel wird eine Zeichenfolge aus zwei vorhandenen Zeichenfolgenobjekten und einem getrennten Zeichen erstellt.
string helloString1 = "Hello";
string helloString2 = "World!";
Console.WriteLine(String.Concat(helloString1, ' ', helloString2));
// The example displays the following output:
// Hello World!
Dim helloString1 As String = "Hello"
Dim helloString2 As String = "World!"
Console.WriteLine(String.Concat(helloString1, " "c, helloString2))
' The example displays the following output:
' Hello World!
String.Join
Die String.Join-Methode erstellt eine neue Zeichenfolge aus einem Array von Zeichenfolgen und einem Trennzeichen. Diese Methode ist nützlich, wenn Sie mehrere Zeichenfolgen miteinander verketten möchten, wodurch eine Liste möglicherweise durch ein Komma getrennt wird.
Das folgende Beispiel verwendet ein Leerzeichen, um ein Zeichenfolgenarray zu binden.
string[] words = {"Hello", "and", "welcome", "to", "my" , "world!"};
Console.WriteLine(String.Join(" ", words));
// The example displays the following output:
// Hello and welcome to my world!
Dim words() As String = {"Hello", "and", "welcome", "to", "my", "world!"}
Console.WriteLine(String.Join(" ", words))
' The example displays the following output:
' Hello and welcome to my world!
String.Insert
Die String.Insert Methode erstellt eine neue Zeichenfolge, indem sie eine Zeichenfolge an eine angegebene Position in einer anderen Zeichenfolge einfügt. Diese Methode verwendet einen nullbasierten Index. Im folgenden Beispiel wird eine Zeichenfolge an der fünften Indexposition von MyString eingefügt und mit diesem Wert eine neue Zeichenfolge erstellt.
string sentence = "Once a time.";
Console.WriteLine(sentence.Insert(4, " upon"));
// The example displays the following output:
// Once upon a time.
Dim sentence As String = "Once a time."
Console.WriteLine(sentence.Insert(4, " upon"))
' The example displays the following output:
' Once upon a time.
String.CopyTo
Die String.CopyTo Methode kopiert Teile einer Zeichenfolge in ein Array von Zeichen. Sie können sowohl den Anfangsindex der Zeichenfolge als auch die Anzahl der zu kopierenden Zeichen angeben. Diese Methode verwendet den Quellindex, ein Array von Zeichen, den Zielindex und die Anzahl der zu kopierenden Zeichen. Alle Indizes sind nullbasiert.
Im folgenden Beispiel wird die CopyTo Methode verwendet, um die Zeichen des Worts "Hello" aus einem Zeichenfolgenobjekt in die erste Indexposition eines Arrays von Zeichen zu kopieren.
string greeting = "Hello World!";
char[] charArray = {'W','h','e','r','e'};
Console.WriteLine($"The original character array: {new string(charArray)}");
greeting.CopyTo(0, charArray,0 ,5);
Console.WriteLine($"The new character array: {new string(charArray)}");
// The example displays the following output:
// The original character array: Where
// The new character array: Hello
Dim greeting As String = "Hello World!"
Dim charArray() As Char = {"W"c, "h"c, "e"c, "r"c, "e"c}
Console.WriteLine("The original character array: {0}", New String(charArray))
greeting.CopyTo(0, charArray, 0, 5)
Console.WriteLine("The new character array: {0}", New String(charArray))
' The example displays the following output:
' The original character array: Where
' The new character array: Hello
String.Create
Mit der String.Create Methode können Sie die Zeichen einer neuen Zeichenfolge programmgesteuert mithilfe eines Rückrufs ausfüllen. Der Rückruf empfängt ein beschreibbares Span<T> von Zeichen und ein vom Aufrufer bereitgestelltes Statusobjekt, sodass Sie den Inhalt der Zeichenfolge erstellen können, ohne Zwischenpuffer für Zeichen zuzuordnen. Der Rückruf selbst kann weiterhin Speicher allokieren, z. B. wenn er lokale Variablen erfasst oder andere speicheraufwendige APIs aufruft.
Im folgenden Beispiel wird String.Create verwendet, um eine Zeichenfolge aus fünf aufeinanderfolgenden Alphabetzeichen zu erstellen.
string result = string.Create(5, 'a', (span, firstChar) =>
{
for (int i = 0; i < span.Length; i++)
{
span[i] = (char)(firstChar + i);
}
});
Console.WriteLine(result); // abcde
Module Program
Sub Main()
Dim result As String = String.Create(5, "a"c, Sub(span, firstChar)
For i As Integer = 0 To span.Length - 1
span(i) = ChrW(AscW(firstChar) + i)
Next
End Sub)
Console.WriteLine(result) ' abcde
End Sub
End Module
String.Create ist für leistungskritische Szenarien konzipiert, in denen Sie die endgültige Zeichenfolgenlänge im Voraus kennen und vermeiden möchten, Zwischenpuffer zuzuweisen. Die Laufzeitumgebung weist eine neue Zeichenfolge zu, übergibt den Backing Buffer direkt als
String.Create Vs. new String(Span<char>)
Eine weitere Möglichkeit zum effizienten Erstellen von Zeichenfolgen besteht darin, einen Zeichenpuffer zuzuweisen stackalloc, ihn auszufüllen und an den String(ReadOnlySpan<char>) Konstruktor zu übergeben:
static string CreateStringFromSpan()
{
Span<char> span = stackalloc char[5];
for (int i = 0; i < 5; i++)
{
span[i] = (char)('a' + i);
}
return new string(span);
}
Console.WriteLine(CreateStringFromSpan()); // abcde
Beide Ansätze ordnen die letztendliche Zeichenfolge genau einmal zu. Hauptunterschiede:
-
stackalloc+new string(span)platziert den Arbeitspuffer auf dem Stapel. Dies ist am schnellsten für kleine, festgelegte Puffer, aber der Stapel ist eine endliche Ressource; große oder tief geschachtelte Allokationen können zu einerStackOverflowException. Dieses Beispiel zeigt das C#stackalloc-Muster; Visual Basic unterstütztstackallocnicht, kann aber trotzdem denString(ReadOnlySpan<char>)-Konstruktor aufrufen, wenn Sie einReadOnlySpan<char>haben. -
String.Createweist den Arbeitspuffer für den Heap als Teil des Zeichenfolgenobjekts selbst zu, sodass kein Stapeldruck vorhanden ist. Sie akzeptiert auch einen typisierten Zustandsparameter, den die Runtime ohne Boxing an Ihren Rückruf übergibt, wodurch Boxing-Allokationen vermieden werden, wenn der Zustand ein Verweistyp oder eine nicht erfasster Strukturtyp ist. Im Allgemeinen bevorzugen Siestackalloc+new String(span)kleine Zeichenfolgen (in der Regel weniger als ein paar hundert Zeichen) mit einer bekannten, begrenzten Größe. Verwenden SieString.Create, wenn die Größe möglicherweise groß ist, wenn Sie Stapeldruck vermeiden möchten, oder wenn Sie den Zustand ohne Boxen in den Rückruf übergeben.