2015-05-12 12 views
10

In MVC 6 Quellcode sah ich einige Code-Zeilen, die Zeichenfolgen mit $ Zeichen führen.

Wie ich es vorher noch nie gesehen habe, denke ich, dass es in C# 6.0 neu ist. Ich bin mir nicht sicher. (Ich hoffe, ich habe recht, sonst ich schockiert sein würde, wie ich es noch nie gekreuzt

Es war wie:..

var path = $"'{pathRelative}'"; 
+1

@JeroenVannevel Ja, es erklärt jetzt, was es ist, aber der Titel der Frage macht es schwer es zu finden und die akzeptierte Antwort ist alt. Also ich denke es lohnt sich immer noch darum zu bitten? – Yves

+2

Das scheint mir kein Duplikat zu sein. Ohne bereits zu wissen, was der $ für Sie ist, werden Sie diese andere Frage nicht finden. –

+2

@RichardDalton: Das bedeutet nicht, dass es nicht die gleiche Frage ist. Eine Umformulierung der Frage ist * kein * Grund, sie zu duplizieren. Es geht auch nicht um die akzeptierte Antwort, es geht um die zweite Antwort, die hinzugefügt wurde, um sie zu aktualisieren. Diese Frage sollte geschlossen bleiben. Wenn Sie nicht zustimmen, gibt es immer http://meta.stackoverflow.com/, um es weiter zu diskutieren. –

Antwort

18

Sie haben recht, das ist eine neue C# 6 Funktion ist

Das $ Zeichen vor einem String ermöglicht String-Interpolation. der Compiler speziell die Zeichenfolge analysieren, und alle Ausdrücke in geschweiften Klammern werden in das String an Ort und Stelle ausgewertet und eingefügt werden.

Unter der Haube auf den gleichen konvertiert Ding als das:

var path = string.Format("'{0}'", pathRelative); 

die für diesen Schnipsel an der IL Werfen wir einen Blick:

var test = "1"; 
var val1 = $"{test}"; 
var val2 = string.Format("{0}", test); 

die zu kompiliert:

// var test = "1"; 
IL_0001: ldstr "1" 
IL_0006: stloc.0 

// var val1 = $"{test}"; 
IL_0007: ldstr "{0}" 
IL_000c: ldloc.0 
IL_000d: call string [mscorlib]System.String::Format(string, object) 
IL_0012: stloc.1 

// var val2 = string.Format("{0}", test); 
IL_0013: ldstr "{0}" 
IL_0018: ldloc.0 
IL_0019: call string [mscorlib]System.String::Format(string, object) 
IL_001e: stloc.2 

So sind die beiden identisch in der kompilierten Anwendung.


Ein Hinweis auf der String-Interpolation Syntax C#: Leider sind die Gewässer jetzt auf String-Interpolation schlammig, da die ursprüngliche C# 6 Vorschau ein different syntax hatte, die schon früh viel Aufmerksamkeit bekam auf Blogs. Sie werden immer noch viele Verweise auf die Verwendung von Backslashes für die String-Interpolation sehen, aber dies ist nicht mehr syntaktisch gültig.