Zeichenfolgeninterpolation in C#String Interpolation in C#

Die Zeichenfolgeninterpolation ermöglicht, dass Platzhalter in einer Zeichenfolge durch den Wert einer Zeichenfolgenvariablen ersetzt werden.String Interpolation is the way that placeholders in a string are replaced by the value of a string variable. Vor C# 6 wurde dies mit System.String.Format realisiert.Before C# 6, the way to do this is with System.String.Format. Dies funktioniert gut, aber da dabei nummerierte Platzhalter verwendet werden, kann es schwieriger zu lesen und detaillierter sein.This works okay, but since it uses numbered placeholders, it can be harder to read and more verbose.

In anderen Programmiersprachen ist die Zeichenfolgeninterpolation bereits seit einer Weile integriert.Other programming languages have had string interpolation built into the language for a while. Zum Beispiel in PHP:For instance, 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.In C# 6, we finally have that style of string interpolation. Sie können ein $ vor einer Zeichenfolge verwenden, um anzugeben, dass sie Variablen/Ausdrücke durch deren Werte ersetzen soll.You can use a $ before a string to indicate that it should substitute variables/expressions for their values.

Erforderliche KomponentenPrerequisites

Sie müssen Ihren Computer zur Ausführung von .NET Core einrichten.You’ll need to set up your machine to run .NET core. Die Installationsanweisungen finden Sie auf der Seite .NET Core.You can find the installation instructions on the .NET Core page. Sie können diese Anwendung unter Windows, Ubuntu Linux, macOS oder in einem Docker-Container ausführen.You can run this application on Windows, Ubuntu Linux, macOS or in a Docker container. Sie müssen Ihren bevorzugten Code-Editor installieren.You’ll need to install your favorite code editor. In den folgenden Beschreibungen wird Visual Studio Code verwendet. Hierbei handelt es sich um einen plattformübergreifenden Open Source-Editor.The descriptions below use Visual Studio Code which is an open source, cross platform editor. Sie können jedoch auch ein beliebiges anderes Tool verwenden, mit dem Sie vertraut sind.However, you can use whatever tools you are comfortable with.

Erstellen der AnwendungCreate the Application

Nachdem Sie alle Tools installiert haben, erstellen Sie eine neue .NET Core-Anwendung.Now that you've installed all the tools, create a new .NET Core application. 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:To use the command line generator, create a directory for your project, such as interpolated, and execute the following command in your favorite shell:

dotnet new console

Dieser Befehl erstellt ein neues .NET Core-Projekt mit einer Projektdatei, interpolated.csproj, und einer Quellcodedatei, Program.cs.This command will create a barebones .NET core project with a project file, interpolated.csproj, and a source code file, Program.cs. Sie müssen dotnet restore ausführen, um die Abhängigkeiten wiederherzustellen, die zum Kompilieren dieses Projekts erforderlich sind.You will need to execute dotnet restore to restore the dependencies needed to compile this project.

Hinweis

Starting with .NET Core 2.0, you don't have to run dotnet restore because it's run implicitly by all commands, such as dotnet build and dotnet run, that require a restore to occur. It's still a valid command in certain scenarios where doing an explicit restore makes sense, such as continuous integration builds in Visual Studio Team Services or in build systems that need to explicitly control the time at which the restore occurs.

Verwenden Sie zum Ausführen des Programms dotnet run.To execute the program, use dotnet run. Es sollte „Hello, World“ auf der Konsole ausgegeben werden.You should see "Hello, World" output to the console.

Einführung zur ZeichenfolgeninterpolationIntro to String Interpolation

Mit System.String.Format geben Sie „Platzhalter“ in einer Zeichenfolge an, die von den Parametern ersetzt werden, die auf die Zeichenfolge folgen.With System.String.Format, you specify "placeholders" in a string that are replaced by the parameters following the string. Zum Beispiel:For instance:

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.That will output "My name is Matt Groves".

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.In C# 6, instead of using String.Format, you define an interpolated string by prepending it with the $ symbol, and then using the variables directly in the string. Zum Beispiel:For instance:

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

Sie müssen nicht einfach Variablen verwenden.You don't have to use just variables. Sie können jeden Ausdruck innerhalb der Klammern verwenden.You can use any expression within the brackets. Zum Beispiel:For instance:

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

Die Ausgabe wäre:Which would output:

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 ZeichenfolgeninterpolationHow string interpolation works

Hinter den Kulissen wird diese Zeichenfolgeninterpolations-Syntax vom Compiler in String.Format übersetzt.Behind the scenes, this string interpolation syntax is translated into String.Format by the compiler. So können Sie das Gleiche tun, was Sie bereits mit String.Format getan haben.So, you can do the same type of stuff you've done before with String.Format.

Sie können z.B. auffüllen und numerisch formatieren:For instance, you can add padding and numeric formatting:

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:The above would output something like:

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.If a variable name is not found, then a compile time error will be generated.

Zum Beispiel:For instance:

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:If you compile this, you'll get errors:

  • Cannot use local variable 'adj' before it is declared – die adj-Variable wurde erst nach der interpolierten Zeichenfolge deklariert.Cannot use local variable 'adj' before it is declared - the adj variable wasn't declared until after the interpolated string.
  • The name 'otheranimal' does not exist in the current context – eine Variable namens otheranimal wurde nie deklariertThe name 'otheranimal' does not exist in the current context - a variable called otheranimal was never even declared

Lokalisierung und InternationalisierungLocalization and Internationalization

Eine interpolierte Zeichenfolge unterstützt IFormattable und FormattableString, was für die Internationalisierung nützlich sein kann.An interpolated string supports IFormattable and FormattableString, which can be useful for internationalization.

Standardmäßig verwendet eine interpolierte Zeichenfolge die aktuelle Kultur.By default, an interpolated string uses the current culture. Um eine andere Kultur zu verwenden, können Sie sie in IFormattable umwandeln.To use a different culture, you could cast it as IFormattable

Zum Beispiel:For instance:

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"

SchlussfolgerungConclusion

In diesem Tutorial haben Sie gelernt, wie Sie Zeichenfolgeninterpolations-Funktionen von C# 6 verwenden.In this tutorial, you learned how to use string interpolation features of C# 6. Es ist im Grunde eine präzisere Methode, einfache String.Format-Anweisungen zu schreiben, mit einigen Einschränkungen für fortgeschrittenere Verwendungen.It's basically a more concise way of writing simple String.Format statements, with some caveats for more advanced uses of it.