$ – String-Interpolation – String-Ausgabe formatieren (2023)

  • Artikel

Der besondere Charakter$Markiert ein String-Literal alsinterpolierte Zeichenfolge. Eine interpolierte Zeichenfolge ist eine Literalzeichenfolge, die dies kannInterpolationsausdrückeenthält. Wenn eine interpolierte Zeichenfolge in eine Ergebniszeichenfolge konvertiert wird, werden Elemente, die Interpolationsausdrücke enthalten, durch die Zeichenfolgendarstellungen der Ausdrucksergebnisse ersetzt.

Die String-Interpolation bietet eine besser lesbare und benutzerfreundliche Syntax zum Formatieren von Strings. Es ist einfacher zu lesenZusammengesetzte Formatierung von Zeichenfolgen. Das folgende Beispiel erzeugt mit beiden Funktionen die gleiche Ausgabe:

string name = "Mark";var date = DateTime.Now;// Compound format:Console.WriteLine("Hallo, {0}! Heute ist {1}, es ist jetzt {2:HH:mm}.", name , date.DayOfWeek, date);// String interpolation:Console.WriteLine($"Hallo, {name}! Heute ist {date.DayOfWeek}, jetzt ist es {date:HH:mm}.");/ / Beide Aufrufe Erzeugen Sie die gleiche Ausgabe, die ähnlich ist wie: // Hallo, Mark! Heute ist Mittwoch, es ist jetzt 19:40 Uhr.

Struktur einer interpolierten Zeichenfolge

Um eine Literalzeichenfolge als interpolierte Zeichenfolge abzugleichen, legen Sie sie fest$Vorwärts-Symbol. Zwischen$In"Am Anfang der Literalzeichenfolge dürfen keine Leerzeichen stehen. Fügen Sie das Sonderzeichen hinzu, um mehrere interpolierte Zeichenfolgen zu verketten$zu einer beliebigen Literalzeichenfolge.

Die Struktur eines Elements mit einem Interpolationsausdruck ist wie folgt:

(Video) C# string interpolation 💲

{[,][:]}

Angaben in eckigen Klammern sind optional. Jedes Element wird in der folgenden Tabelle beschrieben:

ElementBeschreibung
InterpolationsAusdruckDer Ausdruck, der ein zu formatierendes Ergebnis erzeugt. Die Zeichenfolgendarstellung vonnullliestString.Empty.
AusrichtungDer konstante Ausdruck, dessen Wert die Mindestanzahl von Zeichen in der Zeichenfolgendarstellung des Ausdrucksergebnisses definiert. Wenn der Wert positiv ist, ist die Zeichenfolge rechtsbündig. Wenn der Wert negativ ist, wird er linksbündig ausgerichtet. Weitere Informationen finden Sie unterAusrichtungskomponente.
formatStringEine Formatierungszeichenfolge oder benutzerdefinierte Formatierungszeichenfolge, die vom Ausdrucksergebnistyp unterstützt wird. Weitere Informationen finden Sie unterString-Komponente formatieren.

Das folgende Beispiel verwendet die oben beschriebenen Formatierungskomponenten:

Console.WriteLine($"|{"Left",-7}|{"Right",7}|");const int FieldWidthRightAligned = 20;Console.WriteLine($"{Math.PI,FieldWidthRightAligned} – Standardformat von die Pi-Zahl");Console.WriteLine($"{Math.PI,FieldWidthRightAligned:F3} - nur drei Dezimalstellen der Pi-Zahl anzeigen");// Erwartete Ausgabe ist:// |Left | Rechts|// 3.14159265358979 – Standardformat der Pi-Zahl // 3.142 – Zeigt nur drei Dezimalstellen der Pi-Zahl an

Ab C# 10 können Sie die String-Interpolation verwenden, um einen konstanten String zu initialisieren. Alle für Platzhalter verwendeten Ausdrücke müssen konstante Zeichenfolgen sein. Mit anderen Worten: alleInterpolationsausdruckmuss eine Zeichenfolge und auch eine Kompilierzeitkonstante sein.

Ab C#11 können die interpolierten Ausdrücke Zeilenumbrüche enthalten. Der Text dazwischen{In}Muss im gültigen C#-Format vorliegen und darf daher Zeilenumbrüche enthalten, um die Lesbarkeit zu verbessern. Das folgende Beispiel zeigt, wie Zeilenumbrüche die Lesbarkeit eines Ausdrucks mit Mustervergleich verbessern können:

string message = $ „Die Nutzungsrichtlinie für {safetyScore} ist { securityScore switch { > 90 => „Uneingeschränkte Nutzung“, > 80 => „Allgemeine Nutzung, mit täglicher Sicherheitsüberprüfung“, > 70 => „Probleme müssen innerhalb von behoben werden 1 Woche“, > 50 => „Probleme müssen innerhalb von 1 Tag behoben werden“, _ => „Probleme müssen vor der weiteren Verwendung behoben werden“, } }“;

Ab C#11 können Sie auch a verwendenRohes String-LiteralVerwenden Sie für die Formatzeichenfolge:

int X = 2;int Y = 3;var pointMessage = $"""Der Punkt "{X}, {Y}" ist {Math.Sqrt(X * Console.WriteLine(pointMessage); // Ausgabe: Der Punkt „2, 3“ ist 3,605551275463989 vom Ursprung entfernt.

Sie können mehrere haben$– Verwenden Sie Zeichen in einem interpolierten Rohzeichenfolgenliteral, um die Zeichen darzustellen{In}in die Ausgabezeichenfolge einbetten, ohne sie zu maskieren:

(Video) Programming Terms: String Interpolation

int X = 2;int Y = 3;var pointMessage = $$"""Der Punkt {{{X}}, {{Y}}} ist {{Math.Sqrt(X * X + Y * Y)}} from the origin""";Console.WriteLine(pointMessage); // Ausgabe: Der Punkt {2, 3} ist 3,605551275463989 vom Ursprung entfernt.

Wenn Ihre Ausgabezeichenfolge mehrere ist{- von}Zeichen, Sie können weitere hinzufügen$– Fügen Sie Zeichen hinzu, um die interpolierte Zeichenfolge anzugeben. Jede Serie aus{In}, was kürzer als die Zahl ist$Zeichen, wird in die Ausgabezeichenfolge eingebettet. Wie im vorherigen Beispiel gezeigt, für Sequenzen, die länger als die Nummer sind$-Charaktere zusätzlich{- von}-In die Ausgabe eingebettete Zeichen. Der Compiler gibt einen Fehler aus, wenn die Klammerfolge größer oder gleich der doppelten Länge der Zahl ist$- Zeichen.

Sie können diese Funktionen mit dem .NET7 SDK ausprobieren. Wenn Sie über das .NET SDK6.00.200 oder höher verfügen, können Sie dies auch tun- Artikel in IhremcsprosDatei aufBeispielsiedeln.

Sonderzeichen

Wenn Sie möchten, dass in dem durch die interpolierte Zeichenfolge erstellten Text eine geschweifte Klammer („{“ oder „}“) erscheint, müssen Sie zwei geschweifte Klammern verwenden, also „{{“ oder „}}“. Weitere Informationen finden Sie unterFluchtklammern.

Da der Doppelpunkt („:“) in einem Element eines Interpolationsausdrucks eine besondere Funktion hat, ist die Verwendung von aBedingungsoperatorSchließen Sie in einem Interpolationsausdruck diesen Ausdruck in Klammern ein.

Das folgende Beispiel zeigt, wie Klammern in eine Ergebniszeichenfolge eingefügt werden. Außerdem erfahren Sie, wie Sie einen bedingten Operator verwenden:

string name = "Horace";int age = 34;Console.WriteLine($"Er fragte: „Ist Ihr Name {name}?\“, wartete aber nicht auf eine Antwort :-{{");Console. WriteLine($"{name} is {age} year{(age == 1 ? "" : "s")} old.");// Erwartete Ausgabe ist:// Er fragte: „Ist Ihr Name Horace?" , habe aber nicht auf eine Antwort gewartet :-{// Horace ist 34 Jahre alt.

Erweiterte interpolierte Zeichenfolgen beginnen mit dem Zeichen$, gefolgt vom Zeichen@. Sie können die Token verwenden$In@In beliebiger Reihenfolge verwenden: beide$@"..."wie@$"..."sind gültige interpolierte erweiterte Zeichenfolgen. Weitere Informationen zu erweiterten Zeichenfolgen finden Sie in den Artikeln unterSaitenInumfangreiche Identifikationen.

(Video) How C# 10 “fixed” string interpolation

Implizite Konvertierungen und Angabe derIFormatProvider-Implementierung

Es gibt drei implizite Konvertierungen einer interpolierten Zeichenfolge:

  1. Die Konvertierung einer interpolierten Zeichenfolge in aZeichenfolgeBeispiel. Die Zeichenfolge ist das Ergebnis der Lösung der interpolierten Zeichenfolge. Alle Elemente eines Interpolationsausdrucks werden durch die ordnungsgemäß formatierten Zeichenfolgendarstellungen ihrer Ergebnisse ersetzt. Diese Konvertierung verwendetAktuelle Kulturzum Formatieren von Ausdrucksergebnissen.

  2. Konvertierung eines interpolierten Strings in aFormatTableString-Instanz, die eine zusammengesetzte Formatzeichenfolge darstellt, die die zu formatierenden Ausdrucksergebnisse enthält. Dies ermöglicht Ihnen von einem einzigenFormatTableString– Instanz erstellt mehrere Ergebniszeichenfolgen mit kulturspezifischem Inhalt. Rufen Sie dazu eine der folgenden Methoden auf:

    • Eine Überladung vonToString(), was eine Ergebniszeichenfolge für istAktuelle KulturElement erstellt.
    • AUnveränderlichMethode, die eine Ergebniszeichenfolge für zurückgibtInvarianteKulturElement erstellt.
    • AToString(IFormatProvider)Methode, die eine Ergebniszeichenfolge für eine bestimmte Kultur erzeugt.

    ToString(IFormatProvider)sorgt für eine benutzerdefinierte Implementierung desIFormatProvider-Schnittstelle, die benutzerdefinierte Formatierung unterstützt. Weitere Informationen finden Sie im AbschnittBenutzerdefinierte Formatierung mit ICustomFormatterdes ArtikelsFormattypen in .NET.

  3. Konvertierung eines interpolierten Strings in aIFormat-TabelleInstanz, mit der Sie mehrere Ergebnismengen mit kulturspezifischem Inhalt aus einer einzigen erstellen könnenIFormat-Tabellebehördliche Genehmigungen.

Im folgenden Beispiel wird die implizite Konvertierung durchgeführtFormatTableStringWird zum Erstellen kulturspezifischer Ergebnismengen verwendet:

(Video) You Completely Misunderstand How Strings Work in C#

double speedOfLight = 299792.458;FormattableString message = $"Die Lichtgeschwindigkeit beträgt {speedOfLight:N3} km/s.";System.Globalization.CultureInfo.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo("en-US");string messageInCurrentCulture = message.ToString();var SpecificCulture = System.Globalization.CultureInfo.GetCultureInfo("en-IN");string messageInSpecificCulture = message.ToString(specialCulture);string messageInInvariantCulture = FormattableString.Invariant(message);Console.WriteLine( $" {System.Globalization.CultureInfo.CurrentCulture,-10} {messageInCurrentCulture}");Console.WriteLine($"{specialCulture,-10} {messageInSpecificCulture}");Console.WriteLine($"{"Invariant",- 10} {messageInInvariantCulture}");// Erwartete Ausgabe ist:// en-NL Die Lichtgeschwindigkeit beträgt 299.792.458 km/s.// en-IN Die Lichtgeschwindigkeit beträgt 2,99.792.458 km/s.// Invariant The Die Lichtgeschwindigkeit beträgt 299.792,458 km/s.

Mehr Ressourcen

Wenn Sie neu in der String-Interpolation sind, sehen Sie sich das interaktive Tutorial an, um weitere Informationen zu erhaltenString-Interpolation in C#. Sie können sich auch ein weiteres Tutorial ansehenString-Interpolation in C#Anzeige. In diesem Tutorial wird die Verwendung interpolierter Zeichenfolgen zum Generieren formatierter Zeichenfolgen veranschaulicht.

Zusammenstellung interpolierter Strings

Als interpolierte Zeichenfolge vom TypZeichenfolgees wird normalerweise in eins gestecktString.Format-Methodenaufruf transformiert. Der Compiler ersetztString.Concatmöglicherweise mit einemString.Format, wenn das analysierte Verhalten mit der Verkettung übereinstimmt.

Als interpolierte Zeichenfolge vom TypIFormat-TabellevonFormatTableStringDas heißt, der Compiler generiert einen Aufruf anFormattableStringFactory.Create-Methode.

Ab C# 10 prüft der Compiler bei der Verwendung eines interpolierten Strings, ob ihm ein Typ zugewiesen wurdeInterpolierte String-Handler-MusterErfüllt. AInterpolierter String-Handlerist ein benutzerdefinierter Typ, der die interpolierte Zeichenfolge in eine Zeichenfolge konvertiert. Ein interpolierter String-Handler stellt ein erweitertes Szenario dar, das normalerweise aus Leistungsgründen verwendet wird. Die Anforderungen zum Erstellen eines interpolierten String-Handlers finden Sie in der SprachspezifikationVerbesserungen an interpolierten Strings. Ich binTutorial zu interpolierten String-HandlernSie können im Abschnitt „Neuigkeiten in C#“ einen Handler erstellen. Wenn Sie in .NET 6 eine interpolierte Zeichenfolge für ein Argument vom Typ verwendenZeichenfolgeverwenden, wird die interpolierte Zeichenfolge datiertSystem.Runtime.CompilerServices.DefaultInterpolatedStringHandlereingearbeitet.

Benachrichtigung

(Video) String-Formatierung (Tabellenspalten)

Ein Nebeneffekt interpolierter String-Handler besteht darin, dass ein benutzerdefinierter Handler, einschließlichSystem.Runtime.CompilerServices.DefaultInterpolatedStringHandler, kann nicht immer alle Ausdrücke auswerten, die als Platzhalter in der interpolierten Zeichenfolge verwendet werden. Das bedeutet, dass bei diesen Ausdrücken keine Nebenwirkungen auftreten können.

C#-Sprachspezifikation

Weitere Informationen finden Sie im AbschnittInterpolierte StringsvonC#-Sprachspezifikation, auch in der FunktionsspezifikationC# 11 – Rohzeichenfolgenliteraleund auch in der FunktionsspezifikationC# 11 – Zeilenumbrüche in String-Interpolationen.

Siehe auch

  • Interpolation vereinfachen (IDE0071-Stilregel)
  • C#-Referenz
  • C#-Sonderzeichen
  • Saiten
  • Standardzeichenfolgen für die Zahlenschreibweise
  • Kombinierte Formatierung
  • String.Format

FAQs

What is the correct syntax for string interpolation? ›

An interpolated verbatim string starts with the $ character followed by the @ character. You can use the $ and @ tokens in any order: both $@"..." and @$"..." are valid interpolated verbatim strings.

How do you escape a string interpolation? ›

Using escape sequences in an interpolated string

Escape sequences should be prefixed with a backslash (“\”). For example, “\n” for new-line; “\t” for tab, etc,.

Why not use string interpolation in logging? ›

Logging frameworks, for example, will recommend avoiding string interpolation because it will cause a string to be realized that may not be needed, depending on the current log-level of the application.

What is string interpolation and explain with example? ›

In computer programming, string interpolation (or variable interpolation, variable substitution, or variable expansion) is the process of evaluating a string literal containing one or more placeholders, yielding a result in which the placeholders are replaced with their corresponding values.

Videos

1. C# string methods 🔤
(Bro Code)
2. .NET 7 Update: Newlines in String Interpolation in 10 Minutes or Less
(IAmTimCorey)
3. F-strings In Python: Everything You Need To Know
(ArjanCodes)
4. Python string format 💬
(Bro Code)
5. String Formatting with F-Strings - Python Tips and Tricks #2
(NeuralNine)
6. Using Custom Format Strings in Power BI Desktop
(Guy in a Cube)

References

Top Articles
Latest Posts
Article information

Author: Manual Maggio

Last Updated: 10/22/2023

Views: 6283

Rating: 4.9 / 5 (49 voted)

Reviews: 80% of readers found this page helpful

Author information

Name: Manual Maggio

Birthday: 1998-01-20

Address: 359 Kelvin Stream, Lake Eldonview, MT 33517-1242

Phone: +577037762465

Job: Product Hospitality Supervisor

Hobby: Gardening, Web surfing, Video gaming, Amateur radio, Flag Football, Reading, Table tennis

Introduction: My name is Manual Maggio, I am a thankful, tender, adventurous, delightful, fantastic, proud, graceful person who loves writing and wants to share my knowledge and understanding with you.