Zeichenfolgen und Zeichenfolgenliterale

Eine Zeichenfolge ist ein Objekt des Typs String, dessen Wert Text ist. Intern wird der Text als sequenzielle schreibgeschützte Auflistung von Char-Objekten gespeichert. Es gibt kein Null-Endzeichen am Ende einer C#-Zeichenfolge; Daher kann eine C#-Zeichenfolge eine beliebige Anzahl eingebetteter NULL-Zeichen ('\0') enthalten. Die Eigenschaft Length einer Zeichenfolge stellt die Anzahl von Char-Objekten dar, die darin enthalten sind, nicht die Anzahl der Unicode-Zeichen. Verwenden Sie für den Zugriff auf einzelne Unicode-Codepunkte in einer Zeichenfolge das Objekt StringInfo.

String im Vergleich zu System.String

In C# ist das Schlüsselwort string ein Alias für String. Stringstring Daher und gleich sind, unabhängig davon, dass es empfohlen wird, den bereitgestellten Alias string zu verwenden, während er auch ohne using System;funktioniert. Die String-Klasse bietet viele Methoden zum sicheren Erstellen, Bearbeiten und Vergleichen von Zeichenfolgen. Außerdem überlädt die Programmiersprache C# einige Operatoren, um allgemeine Zeichenfolgenoperationen zu vereinfachen. Weitere Informationen über das Schlüsselwort finden Sie unter String. Weitere Informationen zum Typ und dessen Methoden finden Sie unter String.

Deklarieren und Initialisieren von Zeichenfolgen

Sie können Zeichenfolgen auf verschiedene Weise deklarieren und Initialisieren, wie im folgenden Beispiel gezeigt:

// Declare without initializing.
string message1;

// Initialize to null.
string message2 = null;

// Initialize as an empty string.
// Use the Empty constant instead of the literal "".
string message3 = System.String.Empty;

// Initialize with a regular string literal.
string oldPath = "c:\\Program Files\\Microsoft Visual Studio 8.0";

// Initialize with a verbatim string literal.
string newPath = @"c:\Program Files\Microsoft Visual Studio 9.0";

// Use System.String if you prefer.
System.String greeting = "Hello World!";

// In local variables (i.e. within a method body)
// you can use implicit typing.
var temp = "I'm still a strongly-typed System.String!";

// Use a const string to prevent 'message4' from
// being used to store another string value.
const string message4 = "You can't get rid of me!";

// Use the String constructor only when creating
// a string from a char*, char[], or sbyte*. See
// System.String documentation for details.
char[] letters = { 'A', 'B', 'C' };
string alphabet = new string(letters);

Sie verwenden den neuen Operator nicht, um ein Zeichenfolgenobjekt zu erstellen, außer beim Initialisieren der Zeichenfolge mit einem Array von Zeichen.

Initialisieren Sie eine Zeichenfolge mit dem konstanten Wert Empty, um ein neues String-Objekt zu erstellen, dessen Zeichenfolge eine Länge von 0 hat. Die Darstellung des Zeichenfolgenliterals einer Zeichenfolge mit einer Länge von 0 ist "". Indem Zeichenfolgen mit dem Wert Empty anstatt NULL initialisiert werden, können Sie die Chancen einer auftretenden NullReferenceException reduzieren. Verwenden Sie die statische Methode IsNullOrEmpty(String), um den Wert einer Zeichenfolge zu überprüfen, bevor Sie versuchen, auf sie zuzugreifen.

Unveränderlichkeit von Zeichenfolgen

Zeichenfolgenobjekte sind unveränderlich: Sie können nach der Erstellung nicht geändert werden. Alle String-Methoden und C#-Operatoren, die eine Zeichenfolge scheinbar verändern, geben in Wirklichkeit die Ergebnisse in einem neuen Zeichenfolgenobjekt zurück. Im folgenden Beispiel werden die beiden ursprünglichen Zeichenfolgen nicht geändert, wenn die Inhalte von s1 und s2 verkettet werden, um eine einzelne Zeichenfolge zu bilden. Der +=-Operator erstellt eine neue Zeichenfolge, die die kombinierten Inhalte enthält. Das neue Objekt wird der Variablen s1 zugewiesen, und das ursprüngliche Objekt, das s1 zugewiesen wurde, wird für die Garbage Collection freigegeben, da keine andere Variable einen Verweis darauf enthält.

string s1 = "A string is more ";
string s2 = "than the sum of its chars.";

// Concatenate s1 and s2. This actually creates a new
// string object and stores it in s1, releasing the
// reference to the original object.
s1 += s2;

System.Console.WriteLine(s1);
// Output: A string is more than the sum of its chars.

Da eine „Zeichenfolgenänderung“ in Wirklichkeit eine neue Erstellung von Zeichenfolgen ist, müssen Sie vorsichtig sein, wenn Sie Verweise auf Zeichenfolgen erstellen. Wenn Sie einen Verweis auf eine Zeichenfolge erstellen und dann die ursprüngliche Zeichenfolge „ändern“, wird der Verweis weiterhin auf das ursprüngliche Objekt anstelle des neuen Objekts zeigen, das erstellt wurde, als die Zeichenfolge geändert wurde. Der folgende Code veranschaulicht dieses Verhalten:

string str1 = "Hello ";
string str2 = str1;
str1 += "World";

System.Console.WriteLine(str2);
//Output: Hello

Weitere Informationen zum Erstellen neuer Zeichenfolgen, die auf Änderungen wie beispielsweise Vorgängen zum Suchen und Ersetzen auf der ursprüngliche Zeichenfolge basieren, finden Sie unter Ändern von Zeichenfolgeninhalten.

An zitierte Zeichenfolgenliterale

Anführungszeichen für Zeichenfolgenliterale werden anfangs und enden mit einem einzelnen doppelten Anführungszeichen (") in derselben Zeile. An zitierte Zeichenfolgenliterale eignen sich am besten für Zeichenfolgen, die in eine einzelne Zeile passen und keine Escapesequenzen enthalten. Ein an zitiertes Zeichenfolgenliteral muss Escapezeichen einbetten, wie im folgenden Beispiel gezeigt:

string columns = "Column 1\tColumn 2\tColumn 3";
//Output: Column 1        Column 2        Column 3

string rows = "Row 1\r\nRow 2\r\nRow 3";
/* Output:
    Row 1
    Row 2
    Row 3
*/

string title = "\"The \u00C6olean Harp\", by Samuel Taylor Coleridge";
//Output: "The Æolean Harp", by Samuel Taylor Coleridge

Ausführliche Zeichenfolgeliterale

Verbatim-Zeichenfolgenliterale eignen sich für mehrzeilige Zeichenfolgen, Zeichenfolgen, die umgekehrte Schrägstriche oder eingebettete doppelte Anführungszeichen enthalten. Verbatim-Zeichenfolgen behalten neue Zeilenzeichen als Teil des Zeichenfolgentexts bei. Verwenden Sie doppelte Anführungszeichen, um ein Anführungszeichen in eine ausführliche Zeichenfolge einzubetten. Im folgenden Beispiel werden einige gängige Verwendungszwecke für allgemeine Zeichenfolgen dargestellt:

string filePath = @"C:\Users\scoleridge\Documents\";
//Output: C:\Users\scoleridge\Documents\

string text = @"My pensive SARA ! thy soft cheek reclined
    Thus on mine arm, most soothing sweet it is
    To sit beside our Cot,...";
/* Output:
My pensive SARA ! thy soft cheek reclined
    Thus on mine arm, most soothing sweet it is
    To sit beside our Cot,...
*/

string quote = @"Her name was ""Sara.""";
//Output: Her name was "Sara."

Unformatierte Zeichenfolgenliterale

Ab C# 11 können Sie unformatierte Zeichenfolgenliterale verwenden, um Zeichenfolgen einfacher zu erstellen, die mehrzeilig sind, oder alle Zeichen verwenden, die Escapesequenzen erfordern. Unformatierte Zeichenfolgenliterale entfernen die Notwendigkeit, escapesequenzen jemals zu verwenden. Sie können die Zeichenfolge schreiben, einschließlich Leerzeichenformatierung, wie sie in der Ausgabe angezeigt werden soll. Ein unformatierter Zeichenfolgenliteral:

  • Beginnt und endet mit einer Sequenz von mindestens drei doppelten Anführungszeichen ("""). Sie dürfen mehr als drei aufeinander folgende Zeichen starten und beenden, um Zeichenfolgenliterale zu unterstützen, die drei (oder mehr) wiederholte Anführungszeichen enthalten.
  • Einzeilige unformatierte Zeichenfolgenliterale erfordern das Öffnen und Schließen von Anführungszeichen in derselben Zeile.
  • Mehrzeilige unformatierte Zeichenfolgenliterale erfordern sowohl öffnende als auch schließende Anführungszeichen in ihrer eigenen Zeile.
  • In mehrzeiligen unformatierten Zeichenfolgenliteralen werden alle Leerzeichen links neben den schließenden Anführungszeichen entfernt.

In den folgenden Beispielen werden die folgenden Regeln veranschaulicht:

string singleLine = """Friends say "hello" as they pass by.""";
string multiLine = """
    "Hello World!" is typically the first program someone writes.
    """;
string embeddedXML = """
       <element attr = "content">
           <body style="normal">
               Here is the main text
           </body>
           <footer>
               Excerpts from "An amazing story"
           </footer>
       </element >
       """;
// The line "<element attr = "content">" starts in the first column.
// All whitespace left of that column is removed from the string.

string rawStringLiteralDelimiter = """"
    Raw string literals are delimited 
    by a string of at least three double quotes,
    like this: """
    """";

In den folgenden Beispielen werden die Compilerfehler veranschaulicht, die basierend auf diesen Regeln gemeldet wurden:

// CS8997: Unterminated raw string literal.
var multiLineStart = """This
    is the beginning of a string 
    """;

// CS9000: Raw string literal delimiter must be on its own line.
var multiLineEnd = """
    This is the beginning of a string """;

// CS8999: Line does not start with the same whitespace as the closing line
// of the raw string literal
var noOutdenting = """
    A line of text.
Trying to outdent the second line.
    """;

Die ersten beiden Beispiele sind ungültig, da mehrzeilige unformatierte Zeichenfolgenliterale die öffnende und schließende Anführungszeichensequenz in einer eigenen Zeile erfordern. Das dritte Beispiel ist ungültig, da der Text aus der schließenden Anführungszeichensequenz herausgezogen wird.

Sie sollten unformatierte Zeichenfolgenliterale in Betracht ziehen, wenn Sie Text generieren, der Zeichen enthält, die Escapesequenzen erfordern, wenn Sie Zeichenfolgenliterale oder Verbatim-Zeichenfolgenliterale verwenden. Unformatierte Zeichenfolgenliterale sind für Sie und andere einfacher zu lesen, da sie dem Ausgabetext genauer ähnelt. Betrachten Sie beispielsweise den folgenden Code, der eine Zeichenfolge formatierter JSON-Datei enthält:

string jsonString = """
{
  "Date": "2019-08-01T00:00:00-07:00",
  "TemperatureCelsius": 25,
  "Summary": "Hot",
  "DatesAvailable": [
    "2019-08-01T00:00:00-07:00",
    "2019-08-02T00:00:00-07:00"
  ],
  "TemperatureRanges": {
    "Cold": {
      "High": 20,
      "Low": -10
    },
    "Hot": {
      "High": 60,
      "Low": 20
    }
            },
  "SummaryWords": [
    "Cool",
    "Windy",
    "Humid"
  ]
}
""";

Vergleichen Sie diesen Text mit dem entsprechenden Text in unserem Beispiel für die JSON-Serialisierung, wodurch dieses neue Feature nicht verwendet wird.

Zeichenfolgen-Escapesequenzen

Escapesequenz Zeichenname Unicode-Codierung
\' Einfaches Anführungszeichen 0x0027
\" Doppeltes Anführungszeichen 0x0022
\\ Umgekehrter Schrägstrich 0x005C
\0 Null 0x0000
\a Warnung 0x0007
\b Rückschritt 0x0008
\f Seitenvorschub 0x000C
\n Zeilenwechsel 0x000A
\r Wagenrücklauf 0x000D
\t Horizontaler Tabulator 0x0009
\v Vertikaler Tabulator 0x000B
\u Unicode-Escapesequenz (UTF-16) \uHHHH (Bereich: 0000 - FFFF; Beispiel: \u00E7 = "ç")
\U Unicode-Escapesequenz (UTF-32) \U00HHHHHH (Bereich: 000000 - 10FFFF; Beispiel: \U0001F47D = "👽")
\x Unicode-Escapesequenz, die ähnlich wie "\u" ist, außer mit variabler Länge \xH[H][H][H] (Bereich: 0 - FFFF; Beispiel: \x00E7 or \x0E7 oder \xE7 = "ç")

Warnung

Wenn Sie die Escapesequenz \x verwenden, weniger als vier Hexadezimalziffern angeben und es sich bei den Zeichen, die der Escapesequenz unmittelbar folgen, um gültige Hexadezimalziffern handelt (z. B. 0–9, A–F und a–f), werden diese als Teil der Escapesequenz interpretiert. Erzeugt z. B \xA1 . "¡", der Codepunkt U+00A1 ist. Wenn das nächste Zeichen jedoch "A" oder "a" ist, wird die Escapesequenz stattdessen als \xA1A "ਚ" interpretiert, was Codepunkt U+0A1A ist. In solchen Fällen können Fehlinterpretationen vermieden werden, indem Sie alle vier Hexadezimalziffern (z. B. \x00A1) angeben.

Hinweis

Zum Zeitpunkt der Kompilierung werden ausführliche Zeichenfolgen in normale Zeichenfolgen mit gleichen Escapesequenzen konvertiert. Aus diesem Grund sehen Sie die Escapezeichen, die vom Compiler hinzugefügt werden, und nicht die ausführliche Version aus Ihrem Sourcecode, wenn Sie eine ausführliche Zeichenfolge in Debugger-Überwachungsfenster anzeigen. Die Zeichenfolge @"C:\files.txt" "verbatim" wird beispielsweise im Überwachungsfenster als "C:\\files.txt" angezeigt.

Formatzeichenfolgen

Eine Formatzeichenfolge ist eine Zeichenfolge, deren Inhalt zur Laufzeit dynamisch bestimmt wird. Formatzeichenfolgen werden erstellt, indem interpolierte Ausdrücke oder Platzhalter in geschweifte Klammern innerhalb einer Zeichenfolge eingebettet werden. Der in den Klammern eingeschlossene Inhalt ({...}) wird in einen Wert aufgelöst und zur Laufzeit als formatierte Zeichenfolge ausgegeben. Es gibt zwei Methoden zum Erstellen von Formatzeichenfolgen: Zeichenfolgeninterpolation und kombinierte Formatierung.

Zeichenfolgeninterpolierung

In C# 6.0 und höheren Versionen werden interpolierte Zeichenfolgen durch das Sonderzeichen $ identifiziert und interpolierte Ausdrücke in geschweifte Klammern eingeschlossen. Wenn Sie neu bei der Zeichenfolgeninterpolation sind, lesen Sie das interaktive C#-Lernprogramm für eine kurze Übersicht.

Verwenden Sie die Zeichenfolgeninterpolation, um die Lesbarkeit und die Wartungsfähigkeit Ihres Codes zu verbessern. Mit der Zeichenfolgeninterpolation werden die gleichen Ergebnisse erzielt wie mit der String.Format-Methode, es wird jedoch die Benutzerfreundlichkeit und Übersichtlichkeit verbessert.

var jh = (firstName: "Jupiter", lastName: "Hammon", born: 1711, published: 1761);
Console.WriteLine($"{jh.firstName} {jh.lastName} was an African American poet born in {jh.born}.");
Console.WriteLine($"He was first published in {jh.published} at the age of {jh.published - jh.born}.");
Console.WriteLine($"He'd be over {Math.Round((2018d - jh.born) / 100d) * 100d} years old today.");

// Output:
// Jupiter Hammon was an African American poet born in 1711.
// He was first published in 1761 at the age of 50.
// He'd be over 300 years old today.

Ab C# 10 können Sie die Zeichenfolgeninterpolation verwenden, um eine konstante Zeichenfolge zu initialisieren, wenn alle für Platzhalter verwendeten Ausdrücke auch konstante Zeichenfolgen sind.

Ab C# 11 können Sie unformatierte Zeichenfolgenliterale mit Zeichenfolgeninterpolationen kombinieren. Sie beginnen und beenden die Formatzeichenfolge mit drei oder mehr aufeinander folgenden doppelten Anführungszeichen. Wenn Ihre Ausgabezeichenfolge das Zeichen oder } das { Zeichen enthalten soll, können Sie zusätzliche $ Zeichen verwenden, um anzugeben, wie viele {} Zeichen beginnen und eine Interpolation beenden. Jede Abfolge weniger { zeichen } ist in der Ausgabe enthalten. Das folgende Beispiel zeigt, wie Sie dieses Feature verwenden können, um den Abstand eines Punkts vom Ursprung anzuzeigen und den Punkt in geschweiften Klammern zu platzieren:

int X = 2;
int Y = 3;

var pointMessage = $$"""The point {{{X}}, {{Y}}} is {{Math.Sqrt(X * X + Y * Y)}} from the origin.""";

Console.WriteLine(pointMessage);
// Output:
// The point {2, 3} is 3.605551275463989 from the origin.

Kombinierte Formatierung

String.Format verwendet Platzhalter in geschweiften Klammern, um eine Formatzeichenfolge zu erstellen. Dieses Beispiel liefert als Ergebnis eine ähnliche Ausgabe wie die oben verwendete Methode zur Zeichenfolgeninterpolation.

var pw = (firstName: "Phillis", lastName: "Wheatley", born: 1753, published: 1773);
Console.WriteLine("{0} {1} was an African American poet born in {2}.", pw.firstName, pw.lastName, pw.born);
Console.WriteLine("She was first published in {0} at the age of {1}.", pw.published, pw.published - pw.born);
Console.WriteLine("She'd be over {0} years old today.", Math.Round((2018d - pw.born) / 100d) * 100d);

// Output:
// Phillis Wheatley was an African American poet born in 1753.
// She was first published in 1773 at the age of 20.
// She'd be over 300 years old today.

Weitere Informationen zum Formatieren von .NET-Typen finden Sie unter Formatierungstypen in .NET.

Teilzeichenfolgen

Eine Teilzeichenfolge ist eine beliebige Sequenz von Zeichen, die in einer Zeichenfolge enthalten ist. Verwenden Sie die Substring-Methode, um eine neue Zeichenfolge aus einem Teil der ursprünglichen Zeichenfolge zu erstellen. Sie können nach einem oder mehreren Vorkommnissen einer Teilzeichenfolge suchen, indem Sie die IndexOf-Methode verwenden. Verwenden Sie die Replace-Methode, um alle Vorkommnisse einer angegebenen Teilzeichenfolge mit einer neuen Zeichenfolge zu ersetzen. Wie die Substring Methode gibt Replace tatsächlich eine neue Zeichenfolge zurück und ändert die ursprüngliche Zeichenfolge nicht. Weitere Informationen finden Sie unter Suchen von Zeichenfolgen mithilfe von Zeichenfolgenmethoden und Ändern von Zeichenfolgeninhalten.

string s3 = "Visual C# Express";
System.Console.WriteLine(s3.Substring(7, 2));
// Output: "C#"

System.Console.WriteLine(s3.Replace("C#", "Basic"));
// Output: "Visual Basic Express"

// Index values are zero-based
int index = s3.IndexOf("C");
// index = 7

Zugreifen auf einzelne Zeichen

Sie können die Arraynotation mit einem Indexwert verwenden, um schreibgeschützten Zugriff auf einzelne Zeichen zu erhalten, so wie in folgendem Beispiel gezeigt:

string s5 = "Printing backwards";

for (int i = 0; i < s5.Length; i++)
{
    System.Console.Write(s5[s5.Length - i - 1]);
}
// Output: "sdrawkcab gnitnirP"

Wenn die String Methoden nicht die Funktionalität bereitstellen, die Sie zum Ändern einzelner Zeichen in einer Zeichenfolge benötigen, können Sie ein StringBuilder Objekt verwenden, um die einzelnen Zeichen "in-place" zu ändern, und erstellen Sie dann eine neue Zeichenfolge, um die Ergebnisse mithilfe der StringBuilder Methoden zu speichern. Im folgenden Beispiel wird davon ausgegangen, dass Sie die ursprüngliche Zeichenfolge auf eine bestimmte Weise ändern und die Ergebnisse für die zukünftige Verwendung speichern müssen:

string question = "hOW DOES mICROSOFT wORD DEAL WITH THE cAPS lOCK KEY?";
System.Text.StringBuilder sb = new System.Text.StringBuilder(question);

for (int j = 0; j < sb.Length; j++)
{
    if (System.Char.IsLower(sb[j]) == true)
        sb[j] = System.Char.ToUpper(sb[j]);
    else if (System.Char.IsUpper(sb[j]) == true)
        sb[j] = System.Char.ToLower(sb[j]);
}
// Store the new string.
string corrected = sb.ToString();
System.Console.WriteLine(corrected);
// Output: How does Microsoft Word deal with the Caps Lock key?

Nullzeichenfolgen und leere Zeichenfolgen

Eine leere Zeichenfolge ist eine Instanz eines System.String-Objekts, dass 0 Zeichen enthält. Leere Zeichenfolgen werden häufig in verschiedenen Programmierszenarios verwendet, um ein leeres Textfeld darzustellen. Sie können Methoden für leere Zeichenfolgen aufrufen, da sie gültige System.String Objekte sind. Leere Zeichenfolgen werden wie folgt initialisiert:

string s = String.Empty;

Im Gegensatz dazu verweist eine NULL-Zeichenfolge nicht auf eine Instanz eines System.String Objekts, und jeder Versuch, eine Methode für eine NULL-Zeichenfolge aufzurufen, verursacht eine NullReferenceException. Allerdings können Sie NULL-Zeichenfolgen in Verkettungs- und Vergleichsoperationen mit anderen Zeichenfolgen verwenden. Die folgenden Beispiele veranschaulichen einige Fälle, in denen ein Verweis auf eine NULL-Zeichenfolge ausgeführt wird und keine Ausnahme ausgelöst wird:

string str = "hello";
string nullStr = null;
string emptyStr = String.Empty;

string tempStr = str + nullStr;
// Output of the following line: hello
Console.WriteLine(tempStr);

bool b = (emptyStr == nullStr);
// Output of the following line: False
Console.WriteLine(b);

// The following line creates a new empty string.
string newStr = emptyStr + nullStr;

// Null strings and empty strings behave differently. The following
// two lines display 0.
Console.WriteLine(emptyStr.Length);
Console.WriteLine(newStr.Length);
// The following line raises a NullReferenceException.
//Console.WriteLine(nullStr.Length);

// The null character can be displayed and counted, like other chars.
string s1 = "\x0" + "abc";
string s2 = "abc" + "\x0";
// Output of the following line: * abc*
Console.WriteLine("*" + s1 + "*");
// Output of the following line: *abc *
Console.WriteLine("*" + s2 + "*");
// Output of the following line: 4
Console.WriteLine(s2.Length);

Verwenden von stringBuilder für schnelle Zeichenfolgenerstellung

Zeichenfolgenvorgänge in .NET sind stark optimiert und wirken sich in den meisten Fällen nicht erheblich auf die Leistung aus. In einigen Szenarios, z.B. in engen Schleifen, die Hunderttausende Male ausgeführt werden, können sich Zeichenfolgenoperationen auf die Leistung auswirken. Die StringBuilder-Klasse erstellt einen Zeichenfolgenpuffer, der eine verbesserte Leistung mit sich bringt, wenn Ihr Programm viele Zeichenfolgenbearbeitungen durchführt. Mit der StringBuilder Zeichenfolge können Sie auch einzelne Zeichen neu zuweisen, was der integrierte Zeichenfolgendatentyp nicht unterstützt. Dieser Code ändert z.B. den Inhalt einer Zeichenfolge ohne eine neue Zeichenfolge zu erstellen:

System.Text.StringBuilder sb = new System.Text.StringBuilder("Rat: the ideal pet");
sb[0] = 'C';
System.Console.WriteLine(sb.ToString());
//Outputs Cat: the ideal pet

In diesem Beispiel wird ein StringBuilder-Objekt zum Erstellen einer Zeichenfolge aus einem Satz von numerischen Typen verwendet:

var sb = new StringBuilder();

// Create a string composed of numbers 0 - 9
for (int i = 0; i < 10; i++)
{
    sb.Append(i.ToString());
}
Console.WriteLine(sb);  // displays 0123456789

// Copy one character of the string (not possible with a System.String)
sb[0] = sb[9];

Console.WriteLine(sb);  // displays 9123456789

Zeichenfolgen, Erweiterungsmethoden und LINQ

Da der String-Typ IEnumerable<T> implementiert, können Sie die Erweiterungsmethode verwenden, die in der Enumerable-Klasse auf Zeichenfolgen definiert ist. Um visuelle Unübersichtlichkeit zu vermeiden, werden diese Methoden von IntelliSense für den String Typ ausgeschlossen, sind aber dennoch verfügbar. Sie können auch LINQ-Abfrageausdrücke in Zeichenfolgen verwenden. Weitere Informationen finden Sie unter LINQ und Zeichenfolgen.