Qual è la @ davanti a una stringa in C#?



visual studio c# substring (8)

http://msdn.microsoft.com/en-us/library/aa691090.aspx

C # supporta due forme di letterali stringa: letterali stringa regolari e valori letterali stringa letterali.

Un letterale stringa regolare consiste di zero o più caratteri racchiusi tra virgolette, come in "ciao" e può includere sia sequenze di escape semplici (come \ t per il carattere di tabulazione) sia sequenze di escape esadecimali e Unicode.

Un letterale stringa letterale è costituito da un carattere @ seguito da un carattere a virgolette, zero o più caratteri e un carattere di virgoletta doppia di chiusura. Un semplice esempio è @ "ciao". In una letterale stringa letterale, i caratteri tra i delimitatori sono interpretati letteralmente, l'unica eccezione è una sequenza-escape-sequence. In particolare, le sequenze di escape semplici e le sequenze di escape esadecimali e Unicode non vengono elaborate in letterali stringa letterali. Una stringa letterale letterale può estendersi su più righe.

Questa è una domanda .NET per C # (o forse VB.net), ma sto cercando di capire qual è la differenza tra le seguenti dichiarazioni:

string hello = "hello";

vs.

string hello_alias = @"hello";

La stampa sulla console non fa differenza, le proprietà di lunghezza sono le stesse.


Questa è una stringa letterale e modifica le regole di escape: l'unico carattere che è ora sfuggito è ", escape in" ". Questo è particolarmente utile per i percorsi dei file e le regex:

var path = @"c:\some\location";
var tsql = @"SELECT *
            FROM FOO
            WHERE Bar = 1";
var escaped = @"a "" b";

eccetera


Mettere un @ davanti a una stringa consente di utilizzare caratteri speciali come una barra rovesciata o virgolette senza dover utilizzare codici speciali o caratteri di escape.

Quindi puoi scrivere:

string path = @"C:\My path\";

invece di:

string path = "C:\\My path\\";

Mettere un "@" davanti a qualsiasi stringa lo rende una stringa letterale. Un esempio migliore sarebbe

string String1 = "Hello"";

e

string String2 = @"Hello\"";

Il primo sarà un errore di sintassi in cui, come il secondo, verrà stampato Hello ".


È un letterale stringa letterale . Significa che l'escape non viene applicato. Per esempio:

string verbatim = @"foo\bar";
string regular = "foo\\bar";

Qui verbatim e regular hanno gli stessi contenuti.

Permette anche contenuti multi-linea, che possono essere molto utili per SQL:

string select = @"
SELECT Foo
FROM Bar
WHERE Name='Baz'";

L'unico bit di escape che è necessario per i letterali stringa letterali è ottenere una virgoletta doppia (") che si esegue raddoppiando:

string verbatim = @"He said, ""Would you like some coffee?"" and left.";
string regular = "He said, \"Would you like some coffee?\" and left.";

Copiato da MSDN :

Al momento della compilazione, le stringhe letterali vengono convertite in stringhe ordinarie con tutte le stesse sequenze di escape. Pertanto, se si visualizza una stringa letterale nella finestra di controllo del debugger, verranno visualizzati i caratteri di escape aggiunti dal compilatore, non la versione letterale del codice sorgente. Ad esempio, la stringa verbatim @"C:\files.txt" verrà visualizzata nella finestra di controllo come "C:\\files.txt" .


Un '@' ha anche un altro significato: metterlo di fronte a una dichiarazione di variabile ti consente di usare parole chiave riservate come nomi di variabili.

Per esempio:

string @class = "something";
int @object = 1;

Ho trovato solo uno o due usi legittimi per questo. Principalmente in ASP.NET MVC quando vuoi fare qualcosa del genere:

<%= Html.ActionLink("Text", "Action", "Controller", null, new { @class = "some_css_class" })%>

Quale produrrebbe un collegamento HTML come:

<a href="/Controller/Action" class="some_css_class">Text</a>

Altrimenti dovresti usare 'Class', che non è una parola chiave riservata ma la 'C' maiuscola non segue gli standard HTML e non sembra giusta.


Visto che hai chiesto esplicitamente anche VB, lasciatemi aggiungere che questa sintassi della stringa verbatim non esiste in VB, solo in C #. Piuttosto, tutte le stringhe sono espresse in VB (eccetto per il fatto che non possono contenere interruzioni di riga, a differenza delle stringhe di tipo verbale C #):

Dim path = "C:\My\Path"
Dim message = "She said, ""Hello, beautiful world."""

Le sequenze di escape non esistono in VB (eccetto per il raddoppio del carattere di virgolette, come nelle stringhe di testo in C #) che rendono alcune cose più complicate. Ad esempio, per scrivere il codice seguente in VB è necessario utilizzare la concatenazione (o uno qualsiasi degli altri modi per costruire una stringa)

string x = "Foo\nbar";

In VB questo sarebbe scritto come segue:

Dim x = "Foo" & Environment.NewLine & "bar"

( & è possibile utilizzare anche l'operatore di concatenazione di stringhe VB. + ).)





string