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.
@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
Questo non mi sembra un duplicato. Senza sapere già cosa sono i $ per te, non troverai quell'altra domanda. –
@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. –