Quelle est la différence et quand utiliser quoi? Quel est le risque si j'utilise toujours ToLower () et quel est le risque si j'utilise toujours ToLowerInvariant ()?
Selon la culture actuelle, ToLower peut produire une lettre minuscule spécifique à la culture, à laquelle vous ne vous attendiez pas. Comme produire ınfo
sans le point sur le i au lieu de info
et donc faufiler les comparaisons de chaînes. Pour cette raison, ToLowerInvariant doit être utilisé sur des données non spécifiques à une langue. Lorsque vous pouvez avoir une entrée utilisateur qui pourrait être dans leur langue/jeu de caractères natif, ce sera généralement la seule fois que vous utiliserez ToLower.
Voir cette question pour un exemple de ce problème: C # - ToLower () supprime parfois un point de la lettre "I"
Je pense que cela peut être utile:
http://msdn.Microsoft.com/en-us/library/system.string.tolowerinvariant.aspx
mettre à jour
Si votre application dépend du cas d'une chaîne qui change de manière prévisible et qui n'est pas affectée par la culture actuelle, utilisez la méthode ToLowerInvariant. La méthode ToLowerInvariant est équivalente à ToLower (CultureInfo.InvariantCulture). Cette méthode est recommandée lorsqu'un ensemble de chaînes doit apparaître dans un ordre prévisible dans un contrôle d'interface utilisateur.
également
... ToLower est très similaire dans la plupart des endroits à ToLowerInvariant. Les documents indiquent que ces méthodes ne modifieront le comportement qu'avec les cultures turques. De plus, sur les systèmes Windows, le système de fichiers ne respecte pas la casse, ce qui limite encore son utilisation ...
http://www.dotnetperls.com/tolowerinvariant-toupperinvariant
hth
String.ToLower()
utilise la culture par défaut alors que String.ToLowerInvariant()
utilise la culture invariante. Donc, vous demandez essentiellement les différences entre la culture invariante et la comparaison des chaînes ordinales .
TL; DR:
Lorsque vous utilisez du "contenu" (articles, publications, commentaires, noms, espaces, etc., par exemple), utilisez ToLower()
. Lorsque vous utilisez des "littéraux" (par exemple, des arguments de ligne de commande, des grammaires personnalisées, des chaînes qui doivent être des énums, etc.), utilisez ToLowerInvariant()
.
Exemples:
= Utiliser ToLowerInvariant
de manière incorrecte =
En Turquie, DIŞ
signifie "en dehors" et diş
signifie "dent". Le boîtier inférieur approprié de DIŞ
est dış
. Donc, si vous utilisez incorrectement ToLowerInvariant
, vous risquez d'avoir des fautes de frappe en Turquie.
= Utiliser ToLower
de manière incorrecte =
Maintenant, supposez que vous écrivez un analyseur SQL. Quelque part vous aurez un code qui ressemble à:
if(operator.ToLower() == "like")
{
// Handle an SQL LIKE operator
}
La grammaire SQL ne change pas lorsque vous changez de culture. Un Français n'écrit pas SÉLECTIONNEZ x DE books
au lieu de SELECT X FROM books
. Cependant, pour que le code ci-dessus fonctionne, une personne turque devra écrire SELECT x FROM books WHERE Author LİKE '%Adams%'
_ (notez le point au-dessus de la capitale i, presque impossible à voir). Ce serait assez frustrant pour votre utilisateur turc.