2015-05-12 3 views
10

Nel codice sorgente MVC 6 ho visto alcune righe di codice che hanno stringhe che portano con $ segni.

Come non l'ho mai visto prima, penso che sia nuovo in C# 6.0. Non ne sono sicuro. (Spero che ho ragione, altrimenti sarei scioccato come ho mai attraversato prima

E 'stato come:..

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

@JeroenVannevel Sì ora spiega di cosa si tratta, ma il titolo della domanda sta rendendo difficile trovarlo e la risposta accettata è vecchia. Quindi penso valga la pena di chiederglielo? – Yves

+2

Questo non mi sembra un duplicato. Senza sapere già cosa sono i $ per te, non troverai quell'altra domanda. –

+2

@RichardDalton: ciò non significa che non sia la stessa domanda. Una riformulazione della domanda è * non * un motivo per duplicarla. Non si tratta nemmeno della risposta accettata, si tratta della seconda risposta che è stata aggiunta per aggiornarla. Questa domanda dovrebbe rimanere chiusa. Se non sei d'accordo, c'è sempre http://meta.stackoverflow.com/ per discuterne ulteriormente. –

risposta

18

Hai ragione, questo è un nuovo C# 6 caratteristica

il segno $ prima stringa consente stringa interpolazione. il compilatore analizza la stringa appositamente, e qualsiasi espressione all'interno delle parentesi graffe verrà valutato e inserito nella stringa sul posto.

Sotto il cofano converte allo stesso cosa come questa:

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

Guardiamo l'IL per questo frammento:

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

che compila a:

// 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 

Così i due sono identici nell'applicazione compilata.


Una nota sul C# sintassi della stringa di interpolazione: Purtroppo le acque sono infangato in questo momento sul interpolazione stringa, perché l'anteprima originale C# 6 ha avuto un different syntax che ha ottenuto un sacco di attenzione sui blog nella fase iniziale. Vedrai ancora molti riferimenti all'uso dei backslash per l'interpolazione delle stringhe, ma questo non è più sintatticamente valido.