C# – Verwendung von Formatstrings mit Stringinterpolation

C# – Verwendung von Formatstrings mit Stringinterpolation

Interpolierte Strings haben folgende Struktur:{Variable:Format}. Normalerweise schließen Sie das Format aus, sodass sie normalerweise so aussehen:$”Mein Name ist {name}”.

So verwenden Sie Formatzeichenfolgen mit einer interpolierten Zeichenfolge:

decimal orderAmount = 10.2322m;
Console.WriteLine($"You owe: {orderAmount:C}");
Code language: C# (cs)

Dies gibt Folgendes aus:

You owe: $10.23Code language: plaintext (plaintext)

Dies ist das Äquivalent zur Verwendung von string.Format() wie folgt:

string.Format("{0:C}", orderAmount)
Code language: C# (cs)

Wie Sie sehen können, ist die Angabe eines Format-Strings mit einem interpolierten String praktisch dasselbe, wie Sie es mit string.Format() machen würden. Tatsächlich können Sie dieselben Standardformatzeichenfolgen und benutzerdefinierte Formatzeichenfolgen verwenden. Das einzige, was ein bisschen anders ist, ist, wie Sie die Kultur angeben.

In diesem Artikel zeige ich weitere Beispiele für die Verwendung von Formatzeichenfolgen mit interpolierten Zeichenfolgen, einschließlich der Angabe der Kultur.

Kultur angeben

Interpolierte Zeichenfolgen verwenden standardmäßig die aktuelle Kultur. Wenn Sie die Kultur angeben möchten, müssen Sie die interpolierte Zeichenfolge als FormattableString umwandeln, dann .ToString() dafür aufrufen und die Kultur übergeben.

Das ist ziemlich ausführlich. Sie können es entweder in mehrere Zeilen aufteilen oder wie folgt einen einzelnen, sehr dichten Einzeiler verwenden:

//multiple lines
FormattableString s = $"You owe: {orderAmount:C}";
var f = s.ToString(CultureInfo.GetCultureInfo("en-GB"));
Console.WriteLine(f);

//very dense 1 liner
Console.WriteLine(((FormattableString)$"You owe: {orderAmount:C}").ToString(CultureInfo.GetCultureInfo("en-GB")));
Code language: C# (cs)

Dies gibt Folgendes aus:

You owe: £10.23Code language: plaintext (plaintext)

Dies entspricht dem folgenden string.Format()-Ansatz:

string.Format(CultureInfo.GetCultureInfo("en-GB"), "You owe: {0:C}", orderAmount)
Code language: C# (cs)

Möglicherweise bevorzugen Sie hier den string.Format()-Ansatz. Es ist weniger ausführlich, aber Sie verlieren die Vorteile der String-Interpolation.

Andere Formatzeichenfolgen

Sie können beliebige Standardformatzeichenfolgen oder benutzerdefinierte Formatzeichenfolgen mit Zeichenfolgeninterpolation verwenden. Ich zeige unten ein paar weitere Beispiele.

1 – Nur die letzten 3 Dezimalstellen anzeigen

Im Folgenden wird gezeigt, wie Sie eine benutzerdefinierte Formatzeichenfolge verwenden, um die letzten 3 Dezimalstellen einer Zahl anzuzeigen:

decimal orderAmount = 10.2322m;
Console.WriteLine($"3 decimal places: {orderAmount:0.###}");
Code language: C# (cs)

Dies gibt Folgendes aus:

3 decimal places: 10.232Code language: plaintext (plaintext)

2 – Zeigt die aktuelle Zeit an, einschließlich des Zeitzonen-Offsets

Dies zeigt, wie Sie eine benutzerdefinierte Formatzeichenfolge für Datum/Uhrzeit verwenden, um die Zeit- und Zeitzonenverschiebung anzuzeigen.

DateTime now = DateTime.Now;
Console.WriteLine($"Current time: {now:h:mm:ss tt K}");
Code language: C# (cs)

Dies gibt Folgendes aus:

Current time: 8:13:12 AM -05:00Code language: plaintext (plaintext)

3 – Eine Telefonnummer im US-Format anzeigen

Hier wird gezeigt, wie eine benutzerdefinierte Formatzeichenfolge verwendet wird, um eine 10-stellige US-Telefonnummer anzuzeigen (Hinweis:Dies ist eine gefälschte Telefonnummer) .

long phone = 5555555555;
Console.WriteLine($"Phone number: {phone:(###) ###-####}");
Code language: C# (cs)

Dies gibt Folgendes aus:

Phone number: (555) 555-5555Code language: plaintext (plaintext)