Perché usare string.Empty su “” quando si assegna a un oggetto stringa


13

Ho eseguito StyleCop sul mio codice e uno dei consigli di SA1122 è utilizzare string.Empty anziché "" quando si assegna una stringa vuota a un valore.

La mia domanda è: perché questa è considerata la migliore pratica. Oppure, questa è considerata la migliore pratica? Presumo che non ci sia differenza del compilatore tra le due istruzioni, quindi posso solo pensare che sia una cosa leggibile?

Quindi domanda e risposta

Jon Skeet risponde alla domanda


5
Sono sicuro che questo è stato chiesto e risposto su Stack Overflow - ma ho problemi a trovarlo. Ha a che fare con il fatto che deve ""string.Empty
creare

@ChrisF Ahh, non pensavo di cercare un overflow dello stack per questo tipo di domanda. Avrò un gander.
Dreza,

1
dup of question on stackoverflow: stackoverflow.com/questions/151472/…
quentin-starin

@ChrisF - È stato chiesto su SO. Ancora e ancora e ancora ...
Oded

1
Eccoci qui - stackoverflow.com/questions/151472/… - di ritorno da settembre 2008.
ChrisF

Risposte:


12

Un motivo valido è che chiarisce che non si tratta di un errore di battitura o di un segnaposto, che in realtà intendevi usare la stringa vuota qui.

Non so se sia considerata la "migliore pratica".


7

Immagino che ci siano due motivi, uno per la leggibilità e due per un piccolo aumento delle prestazioni.

La leggibilità è semplice: è molto più veloce da individuare string.Emptyrispetto a "". Anche la ricerca string.Emptysarà generalmente più semplice e forse più accurata della ricerca del letterale. Chiarisce anche l'intento: non hai solo fatto un refuso o hai dimenticato di finire qualcosa, volevi davvero una stringa vuota.

Il motivo delle prestazioni è dovuto al interning . Vedete, il runtime mantiene una tabella di stringhe precedentemente utilizzate in modo che possa fare rapidamente confronti tra stringhe senza effettivamente effettuare un controllo carattere per carattere. string.Emptyè già un riferimento internato a ""dove-come digitare il letterale potrebbe non darti la versione internata, causando così un leggero hit di prestazione.


7
un nitpick, digitando il "" letterale ti darà sempre la stessa versione internata di "", almeno da .Net 2 e versioni successive.
Quentin-starin

Giusto, l'articolo interning su MSDN è un po 'difficile da seguire su questo punto. Sembra "" e string.Empty dovrebbe puntare entrambi alla stessa stringa internata, ma sembra indicare alcune differenze tra le versioni di runtime .net. Penso che qualsiasi stringa letterale che appare più volte nel codice verrà internata nel secondo e usi ulteriori, sì?
CodexArcanum,

4
Inoltre, dovrei sottolineare che quando dico leggero intendo super-minuscolo. "A causa delle prestazioni" non è un motivo per passare da una rappresentazione all'altra, è solo una cosa chiara che vale la pena conoscere sul runtime.
CodexArcanum,

4
Va anche notato che l'aspetto delle prestazioni è vero solo per la compilazione. Poiché entrambi vengono compilati nello stesso IL, le prestazioni di runtime dovrebbero essere identiche.
lzcd

quell'aumento delle prestazioni sarebbe solo sulla mania della compilazione
strappo del

4

string.Empty vince in un caso davvero angolare, che può portare a qualche bug magico e davvero difficile da eseguire il debug:

Se è presente uno spazio di larghezza zero in "".


0

Secondo alcuni documenti che ho trovato, ha a che fare con ciò che viene emesso dal compilatore.

Una rapida ricerca rivela: http://stylecop.soyuz5.com/SA1122.html

Perché è archiviato in "Regole di leggibilità" con quella descrizione è sconcertante.

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.