ssortingng.ToLower () et ssortingng.ToLowerInvariant ()

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, ce à quoi vous ne vous attendez pas. Par exemple, produire des ınfo sans le point sur le i au lieu de l’ info et ainsi réduire les comparaisons de chaînes. Pour cette raison, ToLowerInvariant doit être utilisé sur toutes les données non spécifiques à une langue. Si vous pouviez avoir une entrée utilisateur qui pourrait se trouver dans leur langue / ensemble de caractères natifs, ce serait généralement la seule fois que vous utilisez ToLower.

Voir cette question pour un exemple de ce problème: C # – ToLower () supprime parfois le sharepoint la lettre “I”

Je pense que cela peut être utile:

http://msdn.microsoft.com/en-us/library/system.ssortingng.tolowerinvariant.aspx

mettre à jour

Si votre application dépend du cas où une chaîne change de manière prévisible et non affectée par la culture en cours, utilisez la méthode ToLowerInvariant. La méthode ToLowerInvariant est équivalente à ToLower (CultureInfo.InvariantCulture). La méthode est recommandée lorsqu’une collection de chaînes doit apparaître dans un ordre prévisible dans un contrôle d’interface utilisateur.

aussi

… ToLower est très similaire dans la plupart des endroits à ToLowerInvariant. Les documents indiquent que ces méthodes ne changeront que le comportement des cultures turques. De plus, sur les systèmes Windows, le système de fichiers est insensible à la casse, ce qui limite encore son utilisation …

http://www.dotnetperls.com/tolowerinvariant-toupperinvariant

hth

Ssortingng.ToLower() utilise la culture par défaut tandis que Ssortingng.ToLowerInvariant() utilise la culture invariante. Donc, vous demandez essentiellement les différences entre la culture invariante et la comparaison de chaînes ordinales .

TL; DR:

Lorsque vous travaillez avec du “contenu” (par exemple des articles, des articles, des commentaires, des noms, des lieux, etc.), utilisez ToLower() . Lorsque vous travaillez avec des “littéraux” (par exemple des arguments de ligne de commande, des grammaires personnalisées, des chaînes qui devraient être des énumérations, etc.), utilisez ToLowerInvariant() .

Exemples:

= Utiliser ToLowerInvariant incorrectement =

En turc, DIŞ signifie “dehors” et diş signifie “dent”. Le boîtier inférieur correct de DIŞ est dış . Donc, si vous utilisez ToLowerInvariant manière incorrecte, vous pourriez avoir des fautes de frappe en Turquie.

= Utilisation incorrecte de ToLower =

Maintenant, faites comme si vous écriviez un parsingur SQL. Quelque part, vous aurez du 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 de 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 majuscule i, presque impossible à voir). Cela serait très frustrant pour votre utilisateur turc.