Zeichenfolgeninterpolation in C#

Die Zeichenfolgeninterpolation ermöglicht, dass Platzhalter in einer Zeichenfolge durch den Wert einer Zeichenfolgenvariablen ersetzt werden. Vor C# 6 wurde dies mit System.String.Format realisiert. Dies funktioniert gut, aber da dabei nummerierte Platzhalter verwendet werden, kann es schwieriger zu lesen und detaillierter sein.

In anderen Programmiersprachen ist die Zeichenfolgeninterpolation bereits seit einer Weile integriert. Zum Beispiel in PHP:

$name = "Jonas";
echo "My name is $name.";
// This will output "My name is Jonas."

In C# 6 haben wir nun diesen Zeichenfolgeninterpolations-Stil. Sie können ein $ vor einer Zeichenfolge verwenden, um anzugeben, dass sie Variablen/Ausdrücke durch deren Werte ersetzen soll.

Erforderliche Komponenten

Sie müssen Ihren Computer zur Ausführung von .NET Core einrichten. Die Installationsanweisungen finden Sie auf der Seite .NET Core. Sie können diese Anwendung unter Windows, Ubuntu Linux, macOS oder in einem Docker-Container ausführen. Sie müssen Ihren bevorzugten Code-Editor installieren. In den folgenden Beschreibungen wird Visual Studio Code verwendet. Hierbei handelt es sich um einen plattformübergreifenden Open Source-Editor. Sie können jedoch auch ein beliebiges anderes Tool verwenden, mit dem Sie vertraut sind.

Erstellen der Anwendung

Nachdem Sie alle Tools installiert haben, erstellen Sie eine neue .NET Core-Anwendung. Um den Befehlszeilengenerator zu verwenden, erstellen Sie ein Verzeichnis für Ihr Projekt, z.B. interpolated, und führen den folgenden Befehl in Ihrer bevorzugten Shell aus:

dotnet new console

Dieser Befehl erstellt ein neues .NET Core-Projekt mit einer Projektdatei, interpolated.csproj, und einer Quellcodedatei, Program.cs. Sie müssen dotnet restore ausführen, um die Abhängigkeiten wiederherzustellen, die zum Kompilieren dieses Projekts erforderlich sind.

Verwenden Sie zum Ausführen des Programms dotnet run. Es sollte „Hello, World“ auf der Konsole ausgegeben werden.

Einführung zur Zeichenfolgeninterpolation

Mit System.String.Format geben Sie „Platzhalter“ in einer Zeichenfolge an, die von den Parametern ersetzt werden, die auf die Zeichenfolge folgen. Zum Beispiel:

var firstName = "Matt";
var lastName = "Groves";
var str = String.Format("My name is {0} {1}", firstName, lastName);
Console.WriteLine(str);

Damit wird „My name is Matt Groves“ ausgegeben.

In C# 6 definieren Sie eine interpolierte Zeichenfolge, indem Sie ihr das $-Symbol voranstellen und dann die Variablen direkt in der Zeichenfolge verwenden, anstatt String.Format zu verwenden. Zum Beispiel:

var firstName = "Matt";
var lastName = "Groves";
var str = $"My name is {firstName} {lastName}";
Console.WriteLine(str);

Sie müssen nicht einfach Variablen verwenden. Sie können jeden Ausdruck innerhalb der Klammern verwenden. Zum Beispiel:

for(var i = 0; i < 5; i++) {
    Console.WriteLine($"This is line number {i + 1}");
}

Die Ausgabe wäre:

This is line number 1
This is line number 2
This is line number 3
This is line number 4
This is line number 5

So funktioniert die Zeichenfolgeninterpolation

Hinter den Kulissen wird diese Zeichenfolgeninterpolations-Syntax vom Compiler in String.Format übersetzt. So können Sie das Gleiche tun, was Sie bereits mit String.Format getan haben.

Sie können z.B. auffüllen und numerisch formatieren:

var rand = new Random();
for(var i = 998; i < 1005; i++)
{
    var randomDecimal = rand.NextDouble() * 10000;
    Console.WriteLine($"{i, -10} {randomDecimal, 6:N2}");
}

Der obige Code würde folgende Ausgabe ergeben:

998        5,177.67
999        6,719.30
1000       9,910.61
1001       529.34
1002       1,349.86
1003       2,660.82
1004       6,227.77

Wenn der Name einer Variablen nicht gefunden wird, wird ein Kompilierzeitfehler generiert.

Zum Beispiel:

var animal = "fox";
var localizeMe = $"The {adj} brown {animal} jumped over the lazy {otheranimal}";
var adj = "quick";
Console.WriteLine(localizeMe);

Wenn Sie dies kompilieren, erhalten Sie Fehlermeldungen:

  • Cannot use local variable 'adj' before it is declared – die adj-Variable wurde erst nach der interpolierten Zeichenfolge deklariert.
  • The name 'otheranimal' does not exist in the current context – eine Variable namens otheranimal wurde nie deklariert

Lokalisierung und Internationalisierung

Eine interpolierte Zeichenfolge unterstützt IFormattable und FormattableString, was für die Internationalisierung nützlich sein kann.

Standardmäßig verwendet eine interpolierte Zeichenfolge die aktuelle Kultur. Um eine andere Kultur zu verwenden, können Sie sie in IFormattable umwandeln.

Zum Beispiel:

var birthday = new DateTime(1980, 1, 29);
Console.WriteLine($"My birthday is {birthday}");
// This outputs "My birthday is 1/29/1980 12:00:00 AM"

var birthdayFormattable = (IFormattable)$"My birthday is {birthday}";
Console.WriteLine(birthdayFormattable.ToString(null, new CultureInfo("fr-FR")));
// This outputs "My birthday is 29/01/1980 00:00:00"

Schlussfolgerung

In diesem Tutorial haben Sie gelernt, wie Sie Zeichenfolgeninterpolations-Funktionen von C# 6 verwenden. Es ist im Grunde eine präzisere Methode, einfache String.Format-Anweisungen zu schreiben, mit einigen Einschränkungen für fortgeschrittenere Verwendungen.