Verwenden von Variablen in Zeichenfolgen

88

In PHP kann ich Folgendes tun:

$name = 'John';
$var = "Hello {$name}";    // => Hello John

Gibt es ein ähnliches Sprachkonstrukt in C #?

Ich weiß, dass es das gibt, String.Format();aber ich möchte wissen, ob dies möglich ist, ohne eine Funktion / Methode für den String aufzurufen.

thwd
quelle

Antworten:

217

In C # 6 können Sie die Zeichenfolgeninterpolation verwenden :

string name = "John";
string result = $"Hello {name}";

Die Syntaxhervorhebung hierfür in Visual Studio macht es gut lesbar und alle Token werden überprüft.

Fenton
quelle
85

Diese Funktionalität ist nicht in C # 5 oder niedriger integriert.
Update: C # 6 unterstützt jetzt die String-Interpolation, siehe neuere Antworten.

Der empfohlene Weg, dies zu tun, wäre String.Format:

string name = "Scott";
string output = String.Format("Hello {0}", name);

Ich habe jedoch eine kleine Open-Source-Bibliothek namens SmartFormat geschrieben , die String.Formatso erweitert wird , dass benannte Platzhalter (über Reflektion) verwendet werden können. Sie könnten also Folgendes tun:

string name = "Scott";
string output = Smart.Format("Hello {name}", new{name}); // Results in "Hello Scott".

Hoffe du magst es!

Scott Rippey
quelle
2
Welche Art von Leistungseinbußen gibt es für die Verwendung Ihrer Reflection-Implementierung im Vergleich zur Standardzeichenfolge. Format?
Styfle
Ich sehe, dass Sie bereits eine Performance-Seite im Wiki haben. Es sieht ziemlich vielversprechend aus. Gute Arbeit!
Styfle
Ja, ich glaube, die Leistungsseite beantwortet wahrscheinlich Ihre Frage, aber ich habe keine Vergleiche zwischen "Hallo {0}" und "Hallo {Name}" durchgeführt. Offensichtlich wird die Reflexion länger dauern. Die Verwendung der Caching-Funktion verbessert jedoch die Parsing-Leistung und kann den Unterschied minimieren. In jedem Fall sind die Dinge SCHNELL!
Scott Rippey
1
Das stimmt nicht mehr. C # 6 fügte dies als Feature hinzu
Cole Johnson
5

Bis C # 5 (-VS2013) müssen Sie eine Funktion / Methode dafür aufrufen. Entweder eine "normale" Funktion wie String.Formatoder eine Überlastung des Operators +.

string str = "Hello " + name; // This calls an overload of operator +.

In C # 6 (VS2015) wurde eine String-Interpolation eingeführt (wie in anderen Antworten beschrieben).

Anders Abel
quelle
2

Verwenden Sie die folgenden Methoden

1: Methode eins

var count = 123;
var message = $"Rows count is: {count}";

2: Methode zwei

var count = 123;
var message = "Rows count is:" + count;

3: Methode drei

var count = 123;
var message = string.Format("Rows count is:{0}", count);

4: Methode vier

var count = 123;
var message = @"Rows
                count
                is:{0}" + count;

5: Methode fünf

var count = 123;
var message = $@"Rows 
                 count 
                 is: {count}";
Abn Nadschaf
quelle
Es wäre schön, einen Kommentar hinzuzufügen, warum Sie sich für jede dieser Methoden entscheiden würden.
ZombieCode