$ – Zeichenfolgeninterpolation (C#-Referenz)$ - string interpolation (C# reference)

Das Sonderzeichen $ kennzeichnet ein Zeichenfolgenliteral als interpolierte Zeichenfolge.The $ special character identifies a string literal as an interpolated string. Eine interpolierte Zeichenfolge ist ein Zeichenfolgenliteral, das möglicherweise Interpolationsausdrücke enthält.An interpolated string is a string literal that might contain interpolation expressions. Wenn eine interpolierte Zeichenfolge in eine Ergebniszeichenfolge aufgelöst wird, werden Elemente mit Interpolationsausdrücken durch die Zeichenfolgendarstellungen der Ausdrucksergebnisse ersetzt.When an interpolated string is resolved to a result string, items with interpolation expressions are replaced by the string representations of the expression results. Dieses Feature ist ab C# 6 verfügbar.This feature is available starting with C# 6.

Die Zeichenfolgeninterpolation bietet eine Syntax, die besser lesbar und praktischer beim Erstellen formatierter Zeichenfolgen ist als ein Feature für die kombinierte Formatierung von Zeichenfolgen.String interpolation provides a more readable and convenient syntax to create formatted strings than a string composite formatting feature. Im folgenden Beispiel wird mit beiden Features die gleiche Ausgabe erzeugt:The following example uses both features to produce the same output:

string name = "Mark";
var date = DateTime.Now;

// Composite formatting:
Console.WriteLine("Hello, {0}! Today is {1}, it's {2:HH:mm} now.", name, date.DayOfWeek, date);
// String interpolation:
Console.WriteLine($"Hello, {name}! Today is {date.DayOfWeek}, it's {date:HH:mm} now.");
// Both calls produce the same output that is similar to:
// Hello, Mark! Today is Wednesday, it's 19:40 now.

Struktur einer interpolierten ZeichenfolgeStructure of an interpolated string

Wenn Sie ein Zeichenfolgenliteral als interpolierte Zeichenfolge ermitteln möchten, stellen Sie ihm ein $-Symbol voran.To identify a string literal as an interpolated string, prepend it with the $ symbol. Zwischen $ und " am Anfang des Zeichenfolgenliterals dürfen sich keine Leerzeichen befinden.You cannot have any white space between the $ and the " that starts a string literal.

Die Struktur eines Elements mit einem Interpolationsausdruck sieht wie folgt aus:The structure of an item with an interpolation expression is as follows:

{<interpolationExpression>[,<alignment>][:<formatString>]}

Elemente in eckigen Klammern sind optional.Elements in square brackets are optional. In der folgenden Tabelle wird jedes Element beschrieben:The following table describes each element:

ElementElement BESCHREIBUNGDescription
interpolationExpression Der Ausdruck, der zu einem Ergebnis führt, das formatiert werden soll.The expression that produces a result to be formatted. Die Zeichenfolgendarstellung von null lautet String.Empty.String representation of null is String.Empty.
alignment Der konstante Ausdruck, dessen Wert die Mindestanzahl von Zeichen in der Zeichenfolgendarstellung des Ausdrucksergebnisses definiert.The constant expression whose value defines the minimum number of characters in the string representation of the expression result. Bei einem positiven Wert wird die Zeichenfolge rechtsbündig ausgerichtet. Ist der Wert negativ, wird sie linksbündig ausgerichtet.If positive, the string representation is right-aligned; if negative, it's left-aligned. Weitere Informationen finden Sie unter Ausrichtungskomponente.For more information, see Alignment Component.
formatString Eine Formatierungszeichenfolge oder benutzerdefinierte Formatierungszeichenfolge, die durch den Typ des Ausdrucksergebnisses unterstützt wird.A format string that is supported by the type of the expression result. Weitere Informationen finden Sie unter Formatzeichenfolgen-Komponente.For more information, see Format String Component.

Im folgenden Beispiel werden die oben beschriebenen Formatierungskomponenten verwendet:The following example uses optional formatting components described above:

Console.WriteLine($"|{"Left",-7}|{"Right",7}|");

const int FieldWidthRightAligned = 20;
Console.WriteLine($"{Math.PI,FieldWidthRightAligned} - default formatting of the pi number");
Console.WriteLine($"{Math.PI,FieldWidthRightAligned:F3} - display only three decimal digits of the pi number");
// Expected output is:
// |Left   |  Right|
//     3.14159265358979 - default formatting of the pi number
//                3.142 - display only three decimal digits of the pi number    

SonderzeichenSpecial characters

Wenn eine geschweifte Klammer („{“ oder „}“) im Text angezeigt werden soll, der durch die interpolierte Zeichenfolge erstellt wird, müssen Sie zwei geschweifte Klammern verwenden, also „{{“ oder „}}“.To include a brace, "{" or "}", in the text produced by an interpolated string, use two braces, "{{" or "}}". Weitere Informationen finden Sie unter Versehen von geschweiften Klammern mit Escapezeichen.For more information, see Escaping Braces.

Da der Doppelpunkt („:“) im Element eines Interpolationsausdrucks eine besondere Funktion einnimmt, müssen Sie zur Verwendung eines Bedingungsoperators in einem Interpolationsausdruck diesen Ausdruck in runde Klammern einschließen.As the colon (":") has special meaning in an interpolation expression item, in order to use a conditional operator in an interpolation expression, enclose that expression in parentheses.

Im folgenden Beispiel wird gezeigt, wie Sie eine geschweifte Klammer in eine Ergebniszeichenfolge einschließen und einen Bedingungsoperator in einem Interpolationsausdruck verwenden:The following example shows how to include a brace in a result string and how to use a conditional operator in an interpolation expression:

string name = "Horace";
int age = 34;
Console.WriteLine($"He asked, \"Is your name {name}?\", but didn't wait for a reply :-{{");
Console.WriteLine($"{name} is {age} year{(age == 1 ? "" : "s")} old.");
// Expected output is:
// He asked, "Is your name Horace?", but didn't wait for a reply :-{
// Horace is 34 years old.

Ausführliche interpolierte Zeichenfolgen beginnen mit dem Zeichen $, gefolgt vom Zeichen @.An interpolated verbatim string starts with the $ character followed by the @ character. Weitere Informationen zu ausführlichen Zeichenfolgen finden Sie in den Artikeln zu Zeichenfolgen und ausführlichen Bezeichnern.For more information about verbatim strings, see the string and verbatim identifier topics.

Hinweis

Ab C# 8.0 können Sie die Token $ und @ in beliebiger Reihenfolge verwenden: Sowohl $@"..." als auch @$"..." sind gültige interpolierte ausführliche Zeichenfolgen.Starting with C# 8.0, you can use the $ and @ tokens in any order: both $@"..." and @$"..." are valid interpolated verbatim strings. In früheren C#-Versionen musste das Token $ vor dem Token @ vorhanden sein.In earlier C# versions, the $ token must appear before the @ token.

Implizite Konvertierungen und Angeben der IFormatProvider-ImplementierungImplicit conversions and how to specify IFormatProvider implementation

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

  1. Konvertierung einer interpolierten Zeichenfolge in eine Instanz vom Typ String, die das Ergebnis der Auflösung einer interpolierten Zeichenfolge ist, wobei Elemente des Interpolationsausdrucks durch die ordnungsgemäß formatierten Zeichenfolgendarstellungen ihrer Ergebnisse ersetzt werden.Conversion of an interpolated string to a String instance that is the result of interpolated string resolution with interpolation expression items being replaced with the properly formatted string representations of their results. Diese Konvertierung verwendet CurrentCulture zum Formatieren von Ausdrucksergebnissen.This conversion uses the CurrentCulture to format expression results.

  2. Konvertierung einer interpolierten Zeichenfolge in eine FormattableString-Instanz, die eine zusammengesetzte Formatzeichenfolge mit den zu formatierenden Ausdrucksergebnissen darstellt.Conversion of an interpolated string to a FormattableString instance that represents a composite format string along with the expression results to be formatted. Dadurch können Sie aus einer einzigen FormattableString-Instanz mehrere Ergebniszeichenfolgen mit kulturspezifischem Inhalt erstellen.That allows you to create multiple result strings with culture-specific content from a single FormattableString instance. Rufen Sie hierzu eine der folgenden Methoden auf:To do that, call one of the following methods:

    Sie können auch die ToString(IFormatProvider)-Methode verwenden, um eine benutzerdefinierte Implementierung der IFormatProvider-Schnittstelle bereitzustellen, die das benutzerdefinierte Formatieren unterstützt.You also can use the ToString(IFormatProvider) method to provide a user-defined implementation of the IFormatProvider interface that supports custom formatting. Weitere Informationen finden Sie im Abschnitt Benutzerdefinierte Formatierung mit ICustomFormatter des Artikels Formatieren von Typen in .NET.For more information, see the Custom formatting with ICustomFormatter section of the Formatting types in .NET article.

  3. Konvertierung einer interpolierten Zeichenfolge in eine IFormattable-Instanz, die Ihnen das Erstellen mehrerer Ergebniszeichenfolgen mit kulturspezifischem Inhalt aus einer einzigen IFormattable-Instanz ermöglicht.Conversion of an interpolated string to an IFormattable instance that also allows you to create multiple result strings with culture-specific content from a single IFormattable instance.

Im folgenden Beispiel wird die implizite Konvertierung in FormattableString zum Erstellen kulturspezifischer Ergebniszeichenfolgen verwendet:The following example uses implicit conversion to FormattableString to create culture-specific result strings:

double speedOfLight = 299792.458;
FormattableString message = $"The speed of light is {speedOfLight:N3} km/s.";

System.Globalization.CultureInfo.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo("nl-NL");
string messageInCurrentCulture = message.ToString();

var specificCulture = System.Globalization.CultureInfo.GetCultureInfo("en-IN");
string messageInSpecificCulture = message.ToString(specificCulture);

string messageInInvariantCulture = FormattableString.Invariant(message);

Console.WriteLine($"{System.Globalization.CultureInfo.CurrentCulture,-10} {messageInCurrentCulture}");
Console.WriteLine($"{specificCulture,-10} {messageInSpecificCulture}");
Console.WriteLine($"{"Invariant",-10} {messageInInvariantCulture}");
// Expected output is:
// nl-NL      The speed of light is 299.792,458 km/s.
// en-IN      The speed of light is 2,99,792.458 km/s.
// Invariant  The speed of light is 299,792.458 km/s.

Zusätzliche RessourcenAdditional resources

Wenn Sie noch nicht mit der Zeichenfolgeninterpolation vertraut sind, finden Sie weitere Informationen im interaktiven Tutorial Zeichenfolgeninterpolation in C#.If you are new to string interpolation, see the String interpolation in C# interactive tutorial. Sie können sich auch ein anderes Tutorial zur Zeichenfolgeninterpolation in C# ansehen, das veranschaulicht, wie Sie interpolierte Zeichenfolgen verwenden, um formatierte Zeichenfolgen zu erstellen.You also can check another String interpolation in C# tutorial that demonstrates how to use interpolated strings to produce formatted strings.

Kompilierung interpolierter ZeichenfolgenCompilation of interpolated strings

Wenn eine interpolierte Zeichenfolge vom Typ string ist, wird sie in der Regel in einen String.Format-Methodenaufruf transformiert.If an interpolated string has the type string, it's typically transformed into a String.Format method call. Der Compiler ersetzt String.Concat möglicherweise mit einem String.Format, wenn das analysierte Verhalten mit der Verkettung übereinstimmt.The compiler may replace String.Format with String.Concat if the analyzed behavior would be equivalent to concatenation.

Wenn eine interpolierte Zeichenfolge vom Typ IFormattable oder FormattableString ist, generiert der Compiler einen Aufruf der FormattableStringFactory.Create-Methode.If an interpolated string has the type IFormattable or FormattableString, the compiler generates a call to the FormattableStringFactory.Create method.

C#-SprachspezifikationC# language specification

Weitere Informationen finden Sie im Abschnitt Interpolierte Zeichenfolgen der C#-Sprachspezifikation.For more information, see the Interpolated strings section of the C# language specification.

Siehe auchSee also