String.Format fuga VB vs C #
-
29-09-2019 - |
Domanda
Durante la ricerca su come sfuggire a una sola offerta in String.Format, ho trovato la risposta a SO: Escaping apostrofo in String.Format ()
Sembra essere diverso per VB però. Ho provato, e in effetti C # esigenze
string s = DateTime.Now.ToString("MMM d \\'yy 'at' H:mmm");
, mentre le esigenze VB
Dim s As String = Now.ToString("MMM d \'yy 'at' H:mmm")
Perché C # bisogno di una doppia barra rovesciata, e VB una singola barra rovesciata? Questo potrebbe essere un po 'una domanda stupida per C # utenti, ma mentre posso leggere C #, io non sono abituato a scriverlo.
Soluzione
In C #, letterali stringa può contenere sequenze di escape come \ n per una nuova riga o \ t per una scheda o \" per un preventivo. Se non è necessario il fuggire, è possibile far precedere la letterale con @ (ad esempio, :. @"MMM ..."
) e ottenere la stessa stringa un VB
In VB, in fuga non è mai consentito, quindi non c'è necessità di fuggire il backslash.
Altri suggerimenti
Il motivo è che C # supporta le sequenze di escape all'interno stringhe tramite il carattere \
. VB ha tali meccanismi fuga e quindi il singolo \
è interpretato nel modo un \
.
In C # è possibile ottenere lo stesso comportamento utilizzando Verbatim stringhe
@"MMM d \'yy 'at' H:mmm"
In C # il backslash ha un significato (\ n è a capo \ t tab ....). Così backlslahs itselft è un carattere di escape - cui si deve sfuggire :) Oppure mettere un AT-segno di fronte stringa - questo rende un "non sfuggì stringa" (in genere utilizzato per i percorsi)
In C # \ sfuggirà. Il testo diventerà "MMM d \ 'aa 'a' H: mmm". Non è necessario per sfuggire alla 'carattere di una stringa. Se si sceglie di usare "nella stringa d'altra parte, si avrebbe bisogno di sfuggire di non terminare la stringa 'MMM d \' aa \" a \ "H: mmm". Oppure si potrebbe anche utilizzare il "metodo" stringa che sfuggirà automaticamente caratteri per te (non "@ però). Così si potrebbe scrivere @" questo non sarà \ n essere due linee "