Esci da virgolette doppie in una stringa


173

Le virgolette doppie possono essere sfuggite in questo modo:

string test = @"He said to me, ""Hello World"". How are you?";

Ma questo comporta l'aggiunta di carattere "alla stringa. Esiste una funzione C # o un altro metodo per evitare virgolette doppie in modo che non sia necessario cambiare la stringa?


5
puoi usare \ "Hello World \" in questo modo
Pandian,

1
Cosa vuoi davvero di conseguenza? "" diventa "in una stringa letterale.
Roel

Una domanda simile per C / C ++ (in quanto potrebbe essere il principale successo del motore di ricerca): come posso ottenere virgolette doppie in un letterale stringa?
Peter Mortensen,

Risposte:


226

No.

Usa letteralmente stringhe letterali come hai fatto, oppure evita la "barra rovesciata usando.

string test = "He said to me, \"Hello World\" . How are you?";

La stringa non è cambiata in entrambi i casi: è presente un singolo escape " . Questo è solo un modo per dire a C # che il carattere fa parte della stringa e non un terminatore di stringa.


81

È possibile utilizzare la barra rovesciata in entrambi i modi;

string str = "He said to me, \"Hello World\". How are you?";

Stampa;

He said to me, "Hello World". How are you?

che è esattamente le stesse stampe con;

string str = @"He said to me, ""Hello World"". How are you?";

Ecco a DEMO.

" fa ancora parte della tua stringa.

Check out Escape Sequencese String literalsda MSDN.


18

In C # puoi usare la barra rovesciata per inserire caratteri speciali nella tua stringa. Ad esempio, per inserire ", devi scrivere \". Ci sono molti personaggi che scrivi usando la barra rovesciata: barra rovesciata con un numero:

  • \ 000 null
  • \ 010 backspace
  • \ 011 scheda orizzontale
  • \ 012 nuova linea
  • \ 015 ritorno a capo
  • \ 032 sostituto
  • \ 042 virgolette doppie
  • \ 047 virgoletta singola
  • Barra rovesciata \ 134
  • \ 140 accento grave

Backslash con altri personaggi

  • \ a Bell (avviso)
  • Backspace
  • Formfeed
  • \ n Nuova riga
  • Ritorno a capo
  • \ t scheda orizzontale
  • \ v Scheda verticale
  • \ 'Virgolette singole
  • \ "Virgolette doppie
  • \ Backslash
  • \? Punto interrogativo letterale
  • \ ooo carattere ASCII in notazione ottale
  • \ x hh Carattere ASCII in notazione esadecimale
  • \ x hhhh Carattere Unicode in notazione esadecimale se questa sequenza di escape viene utilizzata in una costante a caratteri larghi o in una stringa Unicode letterale. Ad esempio, WCHAR f = L '\ x4e00' o WCHAR b [] = L "Il carattere cinese per uno è \ x4e00".

6

Stai fraintendendo la fuga.

I "caratteri extra fanno parte della stringa letterale; sono interpretati dal compilatore come un singolo " .

Il valore effettivo della stringa è ancora He said to me , "Hello World".How are you ?, come vedrai se lo stampi in fase di esecuzione.


4

Per favore, spiega il tuo problema. Tu dici:

Ma questo comporta l'aggiunta di carattere "alla stringa.

Che problema c'è? Non puoi digitare string foo = "Foo"bar"";, perché ciò invocherà un errore di compilazione. Per quanto riguarda la parte aggiunta , in termini di dimensioni stringa che non è vero:

@"""".Length == "\"".Length == 1
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.