Qual è la differenza e quando usare cosa? Qual è il rischio se uso sempre ToLower()
e qual è il rischio se uso sempre ToLowerInvariant()
?
Qual è la differenza e quando usare cosa? Qual è il rischio se uso sempre ToLower()
e qual è il rischio se uso sempre ToLowerInvariant()
?
Risposte:
A seconda della cultura corrente, ToLower potrebbe produrre una lettera minuscola specifica per la cultura, che non ti aspetti. Come produrre ınfo
senza il punto sull'i invece di info
mettere a confronto i confronti delle stringhe. Per tale motivo, ToLowerInvariant dovrebbe essere utilizzato su qualsiasi dato non specifico della lingua. Quando potresti avere input dell'utente che potrebbero essere nella loro lingua / set di caratteri nativi, in genere sarebbe l'unica volta che usi ToLower.
Vedi questa domanda per un esempio di questo problema: C # - ToLower () a volte rimuove il punto dalla lettera "I"
Penso che questo possa essere utile:
http://msdn.microsoft.com/en-us/library/system.string.tolowerinvariant.aspx
aggiornare
Se l'applicazione dipende dal caso in cui una stringa venga modificata in modo prevedibile e non influenzata dalla cultura corrente, utilizzare il metodo ToLowerInvariant. Il metodo ToLowerInvariant è equivalente a ToLower (CultureInfo.InvariantCulture). Il metodo è consigliato quando una raccolta di stringhe deve apparire in un ordine prevedibile in un controllo dell'interfaccia utente.
anche
... ToLower è molto simile nella maggior parte dei luoghi a ToLowerInvariant. I documenti indicano che questi metodi cambieranno comportamento solo con le culture turche. Inoltre, sui sistemi Windows, il file system non fa distinzione tra maiuscole e minuscole, il che ne limita ulteriormente l'utilizzo ...
http://www.dotnetperls.com/tolowerinvariant-toupperinvariant
hth
String.ToLower()
usa la cultura predefinita mentre String.ToLowerInvariant()
usa la cultura invariante. Quindi stai essenzialmente chiedendo le differenze tra cultura invariante e confronto delle stringhe ordinali .
ToLower
varianti; Ordinale vs. invariante cambia semplicemente l '"ordinamento" di due stringhe, non cambia il confronto di uguaglianza.
TL; DR:
Quando si lavora con "contenuti" (ad esempio articoli, post, commenti, nomi, luoghi, ecc.) Utilizzare ToLower()
. Quando si lavora con "valori letterali" (ad es. Argomenti da riga di comando, grammatiche personalizzate, stringhe che dovrebbero essere enumerazioni, ecc.) Utilizzare ToLowerInvariant()
.
Esempi:
= Uso ToLowerInvariant
errato =
In turco DIŞ
significa "fuori" e diş
"dente". L'alloggiamento inferiore corretto di DIŞ
è dış
. Quindi, se usi in ToLowerInvariant
modo errato potresti avere errori di battitura in Turchia.
= Uso ToLower
errato =
Ora fai finta di scrivere un parser SQL. Da qualche parte avrai un codice simile a:
if(operator.ToLower() == "like")
{
// Handle an SQL LIKE operator
}
La grammatica SQL non cambia quando si cambiano le culture. Un francese non scrive SÉLECTIONNEZ x DE books
invece di SELECT X FROM books
. Tuttavia, affinché il codice sopra riportato funzioni, una persona turca dovrebbe scrivere SELECT x FROM books WHERE Author LİKE '%Adams%'
(notare il punto sopra la maiuscola i, quasi impossibile da vedere). Questo sarebbe abbastanza frustrante per il tuo utente turco.