string.ToLower () e string.ToLowerInvariant ()


Risposte:


149

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"


45

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


@danyolgiax Per favore, puoi approfondire? non posso dedurne l'usabilità dal link di msdn. Grazie
Prerak K

2
sì ToLowerInvariant non funziona in turco come previsto. © diventa Monster
MonsterMMORPG il

28

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 .


No, non lo è. "Ordinale" è una terza opzione: un modo leggermente diverso di "ignorare" la cultura attuale. La distinzione non è rilevante nel discutere le ToLowervarianti; Ordinale vs. invariante cambia semplicemente l '"ordinamento" di due stringhe, non cambia il confronto di uguaglianza.
ToolmakerSteve

28

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.

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.