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 ınfosenza il punto sull'i invece di infomettere 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 .
ToLowervarianti; 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 ToLowerInvarianterrato =
In turco DIŞsignifica "fuori" e diş"dente". L'alloggiamento inferiore corretto di DIŞè dış. Quindi, se usi in ToLowerInvariantmodo errato potresti avere errori di battitura in Turchia.
= Uso ToLowererrato =
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 booksinvece 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.