visual studio c# substring




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

È 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.";

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.


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" .


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 ".


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\\";

Segna la stringa come una stringa letterale letterale - qualsiasi cosa nella stringa che verrebbe normalmente interpretata come una sequenza di escape viene ignorata.

Quindi "C:\\Users\\Rich" è uguale a @"C:\Users\Rich"

C'è un'eccezione: una sequenza di escape è necessaria per la doppia citazione. Per evitare una doppia citazione, è necessario inserire due virgolette doppie in una riga. Ad esempio, @"""" valuta a " .


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.


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.





string