Letterali stringa letterali v sequenze di escape

C’è qualche differenza nel modo in cui il compilatore C # o il runtime .NET gestisce letteralmente i letterali delle stringhe versus usando le sequenze di escape (cioè le prestazioni) o è solo una questione di stile del tempo di progettazione? PER ESEMPIO:

var pathA = "c:\\somewhere"; var pathB = @"c:\somewhere"; 

Immagino che siano compilati allo stesso modo e non importa, ma erano solo curiosi.

Qualsiasi differenza qui è strettamente limitata al compilatore; l’IL e il runtime non hanno alcun concetto di verbatim vs escape: ha solo la stringa .

Per quanto riguarda quale scegliere: a seconda di quale sia più conveniente; p Quasi sempre utilizzo letterali stringa letterali se ci sono caratteri insoliti, in quanto ciò consente di stringere su più righe molto facilmente e visivamente.

Come caso interessante:

 bool areSame = ReferenceEquals("c:\\somewhere", @"c:\somewhere"); // true 

che dice di essere esattamente la stessa istanza di stringa (grazie a “interning”). Non sono solo equivalenti ; sono la stessa istanza di stringa per il runtime. È quindi imansible che possano essere (al runtime) diversi in qualsiasi modo.

Sono esattamente gli stessi. Prova a decompilare le due versioni con un decompilatore.

È solo una questione di convenienza per gli sviluppatori quando lo scrivono nel codice.

Il simbolo @ davanti a una stringa indica al compilatore di ignorare eventuali sequenze di escape incorporate.

la stringa “\” “darebbe una singola virgola doppia. stringa” \ “darebbe una sola stringa di barra indietro @” \ “restituirebbe due backslash