Interpolierte Zeichenfolgen (C#-Referenz)Interpolated Strings (C# Reference)

Zum Erstellen von Zeichenfolgen verwendet.Used to construct strings. Eine interpolierte Zeichenfolge sieht wie eine Vorlagenzeichenfolge aus, die interpolierte Ausdrücke enthält.An interpolated string looks like a template string that contains interpolated expressions. Eine interpolierte Zeichenfolge gibt eine Zeichenfolge zurück, die die interpolierten Ausdrücke, die sie enthält, durch deren Zeichenfolgenrepräsentation ersetzt.An interpolated string returns a string that replaces the interpolated expressions that it contains with their string representations. Diese Funktion ist in c# 6- und neueren Versionen verfügbar.This feature is available in C# 6 and later versions.

Die Argumente einer interpolierten Zeichenfolge sind leichter zu verstehen als eine Zusammengesetzte Formatzeichenfolge.The arguments of an interpolated string are easier to understand than a composite format string. Die interpolierte ZeichenfolgeFor example, the interpolated string

Console.WriteLine($"Name = {name}, hours = {hours:hh}");

enthält interpolierte Ausdrücken "{name}" und "{Stunde:" hh "}".contains two interpolated expressions, '{name}' and '{hour:hh}'. Die entsprechende zusammengesetzte Zeichenfolge lautet:The equivalent composite format string is:

Console.WriteLine("Name = {0}, hours = {1:hh}", name, hours); 

Die Struktur einer interpolierten Zeichenfolge lautet:The structure of an interpolated string is:

$"<text> {<interpolated-expression> [,<field-width>] [:<format-string>] } <text> ..."  

Dabei gilt:where:

  • field-width ist eine Ganzzahl mit Vorzeichen, die die Anzahl von Zeichen in einem Feld angibt.field-width is a signed integer that indicates the number of characters in the field. Wenn sie positiv ist, ist das Feld rechtsbündig; wenn sie negativ ist, ist es linksbündig.If it is positive, the field is right-aligned; if negative, left-aligned.

  • format-string ist eine Formatzeichenfolge, die zu dem Objekttyp passt, der formatiert wird.format-string is a format string appropriate for the type of object being formatted. Für den Wert DateTime wäre es beispielsweise eine Standardzeichenfolge für Datum und Zeit wie etwa „D“ und „d“.For example, for a DateTime value, it could be a standard date and time format string such as "D" or "d".

Wichtig

Sie sind keine Leerzeichen zwischen den $ und " , der die Zeichenfolge beginnt.You cannot have any whitespace between the $ and the " that starts the string. Auf diese Weise verursacht einen Kompilierzeitfehler.Doing so causes a compile time error.

Eine interpolierte Zeichenfolge können Sie überall dort verwenden, wo Sie ein Zeichenfolgenliteral verwenden.You can use an interpolated string anywhere you can use a string literal. Die interpolierte Zeichenfolge wird immer nach ausgewertet, wenn der Code mit der interpolierten Zeichenfolge ausgeführt wird.The interpolated string is evaluated each time the code with the interpolated string executes. So können Sie die Definition und die Auswertung einer interpolierten Zeichenfolge voneinander trennen.This allows you to separate the definition and evaluation of an interpolated string.

Um eine geschweifte Klammer („{“ oder „}“) in eine interpolierte Zeichenfolge einzuschließen, verwenden Sie zwei geschweifte Klammern („{{“ oder „}}“).To include a curly brace ("{" or "}") in an interpolated string, use two curly braces, "{{" or "}}". Ausführliche Informationen finden Sie im Abschnitt „Implizite Konvertierungen“.See the Implicit Conversions section for more details.

Wenn die interpolierte Zeichenfolge andere Zeichen mit besonderen Bedeutungen für eine interpolierte Zeichenfolge enthält, wie z.B. Anführungszeichen („), Doppelpunkte (:) oder Kommas (,), sollten diese mit Escapezeichen verwendet werden, wenn sie in Literaltext vorkommen, oder sie sollten in einen Ausdruck eingefügt werden, der durch Klammern getrennt wird, wenn sie Sprachelemente sind, die in einem interpolierten Ausdruck vorkommen.If the interpolated string contains other characters with special meaning in an interpolated string, such as the quotation mark ("), colon (:), or comma (,), they should be escaped if they occur in literal text, or they should be included in an expression delimited by parentheses if they are language elements included in an interpolated expression. In folgendem Beispiel werden Anführungszeichen mit Escapezeichen verwendet, um diese in der Ergebniszeichenfolge zu beinhalten; Klammern werden zur Trennung des Ausdrucks (age == 1 ? "" : "s") verwendet, damit der Doppelpunkt nicht als Beginn einer Formatzeichenfolge gewertet wird.The following example escapes quotation marks to include them in the result string, and it uses parentheses to delimit the expression (age == 1 ? "" : "s") so that the colon is not interpreted as beginning a format string.

using System;

public class Example
{
   public static void Main()
   {
      var name = "Horace";
      var age = 34;
      var s1 = $"He asked, \"Is your name {name}?\", but didn't wait for a reply.";
      Console.WriteLine(s1);
      
      var s2 = $"{name} is {age:D3} year{(age == 1 ? "" : "s")} old.";
      Console.WriteLine(s2); 
   }
}
// The example displays the following output:
//       He asked, "Is your name Horace?", but didn't wait for a reply.
//       Horace is 034 years old.

Wörtlich interpoliert Zeichenfolgen verwenden die $ Zeichen, gefolgt von den @ Zeichen.Verbatim interpolated strings use the $ character followed by the @ character. Weitere Informationen zu wörtliche Zeichenfolgen, finden Sie unter der Zeichenfolge Thema.For more information about verbatim strings, see the string topic. Der folgende Code ist eine geänderte Version des vorherigen Ausschnitts mit wörtliche interpolierten Zeichenfolge:The following code is a modified version of the previous snippet using a verbatim interpolated string:

using System;

public class Example
{
    public static void Main()
    {
        var name = "Horace";
        var age = 34;
        var s1 = $@"He asked, ""Is your name {name}?"", but didn't wait for a reply.
 {name} is {age:D3} year{(age == 1 ? "" : "s")} old.";
       Console.WriteLine(s1);
    }
}
// The example displays the following output:
//       He asked, "Is your name Horace?", but didn't wait for a reply.
//       Horace is 034 years old.

Die Formatierungsänderungen sind erforderlich, da wörtliche Zeichenfolgen nicht entsprechen, müssen \ Escapesequenzen.The formatting changes are necessary because verbatim strings do not obey \ escape sequences.

Wichtig

Die $ Token muss angezeigt werden, bevor die @ token wörtliche interpolierten Zeichenfolge.The $ token must appear before the @ token in a verbatim interpolated string.

Implizite KonvertierungenImplicit Conversions

Es gibt drei implizite Typkonvertierungen aus einer interpolierten Zeichenfolge:There are three implicit type conversions from an interpolated string:

  1. Die Konvertierung einer interpolierten Zeichenfolge in String.Conversion of an interpolated string to a String. In folgendem Beispiel wird eine Zeichenfolge zurückgegeben, deren interpolierte Zeichenfolgenausdrücke durch deren Zeichenfolgenrepräsentationen ersetzt wurden.The following example returns a string whose interpolated string expressions have been replaced with their string representations. Zum Beispiel:For example:

    using System;
    
    public class Example
    {
       public static void Main()
       {
          var name = "Bartholomew";
          var s1 = $"Hello, {name}!";  
          Console.WriteLine(s1);
       }
    }
    // The example displays the following output:
    //      Hello, Bartholomew!
    

    Das ist das endgültige Ergebnis einer Zeichenfolgeninterpretation.This is the final result of a string interpretation. Alle Vorkommen von doppelten geschweiften Klammern („{{“ oder „}}“) werden in einzelne geschweifte Klammern konvertiert.All occurrences of double curly braces ("{{" and "}}") are converted to a single curly brace.

  2. Die Konvertierung einer interpolierten Zeichenfolge in eine IFormattable-Variable, die es Ihnen ermöglicht, mehrere Ergebniszeichenfolgen mit kulturspezifischem Inhalt aus einer einzelnen IFormattable-Instanz zu erstellen.Conversion of an interpolated string to an IFormattable variable that allows you create multiple result strings with culture-specific content from a single IFormattable instance. Dies ist nützlich, wenn sie z.B. die richtigen numerischen und Datumsformate für eine einzelne Kultur einfügen möchten.This is useful for including such things as the correct numeric and date formats for individual cultures. Alle Vorkommen von doppelten geschweiften Klammern („{{“ oder „}}“) bleiben bestehen, bis Sie die Zeichenfolge formatieren, indem sie die Methode ToString() implizit oder explizit aufrufen.All occurrences of double curly braces ("{{" and "}}") remain as double curly braces until you format the string by explicitly or implicitly calling the ToString() method. Alle enthaltenen Interpolationsausdrücke werden in {0}, {1} usw. konvertiert.All contained interpolation expressions are converted to {0}, {1}, and so on.

    Im folgendem Beispiel wird die Reflektion verwendet, um die Member sowie die Felder- und Eigenschaftwerte der IFormattable-Variablen anzuzeigen, die aus einer interpolierten Zeichenfolge erstellt wird.The following example uses reflection to display the members as well as the field and property values of an IFormattable variable that is created from an interpolated string. Sie übergibt außerdem die IFormattable -Variablen an die Console.WriteLine(String) Methode.It also passes the IFormattable variable to the Console.WriteLine(String) method.

    using System;
    using System.Globalization;
    using System.Reflection;
    
    public class Example
    {
       public static void Main()
       {
          var price = 1000;
          IFormattable s2 = $"The cost of this item is {price:C}.";  
          ShowInfo(s2);
          CultureInfo.CurrentCulture = new CultureInfo("en-US");
          Console.WriteLine(s2);
          CultureInfo.CurrentCulture = new CultureInfo("fr-FR");
          Console.WriteLine(s2);      
       }
    
       private static void ShowInfo(object obj)
       {
          Console.WriteLine("Displaying member information:\n");
          var t = obj.GetType();
          var flags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic;
          foreach (var m in t.GetMembers(flags)) {
             Console.WriteLine($"{m.Name}: {m.MemberType}");   
             if (m.MemberType == MemberTypes.Property) {
                var p = t.GetProperty(m.Name, flags);
                Console.WriteLine($"   Value: {p.GetValue(obj)}");         
             }
             if (m.MemberType == MemberTypes.Field) {
                var f = t.GetField(m.Name, flags);
                Console.WriteLine($"   Value: {f.GetValue(obj)}");
             }
          }
          Console.WriteLine("-------\n");
       }
    }
    // The example displays the following output:
    //       Displaying member information:
    //       
    //       get_Format: Method
    //       GetArguments: Method
    //       get_ArgumentCount: Method
    //       GetArgument: Method
    //       ToString: Method
    //       System.IFormattable.ToString: Method
    //       ToString: Method
    //       Equals: Method
    //       GetHashCode: Method
    //       GetType: Method
    //       Finalize: Method
    //       MemberwiseClone: Method
    //       .ctor: Constructor
    //       Format: Property
    //          Value: The cost of this item is {0:C}.
    //       ArgumentCount: Property
    //          Value: 1
    //       _format: Field
    //          Value: The cost of this item is {0:C}.
    //       _arguments: Field
    //          Value: System.Object[]
    //       -------
    //       
    //       The cost of this item is $1,000.00.
    //       The cost of this item is 1 000,00 €.
    

    Beachten Sie, dass die interpolierte Zeichenfolge nur mithilfe von Reflektion überprüft werden kann.Note that the interpolated string can be inspected only by using reflection. Wenn sie in eine Zeichenfolge, die Methode, wie z. B. Formatierung übergeben wird WriteLine(String), dessen Formatelemente aufgelöst werden, und die Ergebniszeichenfolge zurückgegeben.If it is passed to a string formatting method, such as WriteLine(String), its format items are resolved and the result string returned.

  3. Die Konvertierung einer interpolierten Zeichenfolge in eine FormattableString-Variable, die eine zusammengesetzte Formatzeichenfolge repräsentiert.Conversion of an interpolated string to an FormattableString variable that represents a composite format string. Das Überprüfen der zusammengesetzten Zeichenfolge und wie diese als Ergebniszeichenfolge rendert, hilft Ihnen z.B möglicherweise dabei, sich gegen einen Einschleusungsangriff zu schützen, während Sie eine Abfrage erstellen.Inspecting the composite format string and how it renders as a result string might, for example, help you protect against an injection attack if you were building a query. FormattableString enthält auch ToString()-Überladungen, mit denen Sie Ergebniszeichenfolgen für die Objekte InvariantCulture und CurrentCulture erzeugen können.FormattableString also includes ToString() overloads that let you produce result strings for the InvariantCulture and CurrentCulture. Alle Vorkommen von doppelten geschweiften Klammern („{{“ oder „}}“) bleiben bestehen, bis Sie die Zeichenfolge formatieren.All occurrences of double curly braces ("{{" and "}}") remain as double curly braces, until you format. Alle enthaltenen Interpolationsausdrücke werden in {0}, {1} usw. konvertiert.All contained interpolation expressions are converted to {0}, {1}, and so on.

    using System;
    using System.Globalization;
    
    public class Example
    {
       public static void Main()
       {
          var name = "Bartholomew";
          FormattableString s3 = $"Hello, {name}!";  
          Console.WriteLine($"String: {s3.Format}");
          Console.WriteLine($"Arguments: {s3.ArgumentCount}");
          Console.WriteLine($"Result string: {s3}");
       }
    }
    // The example displays the following output:
    //       String: Hello, {0}!
    //       Arguments: 1
    //       Result string: Hello, Bartholomew!
    

SprachspezifikationLanguage Specification

Weitere Informationen erhalten Sie unter C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.

Siehe auchSee Also

System.IFormattable
System.FormattableString
C#-ReferenzC# Reference
C#-ProgrammierhandbuchC# Programming Guide