192 votes

comparaison de chaînes InvariantCultureIgnoreCase vs OrdinalIgnoreCase?

Quel serait le meilleur code:

 int pos = file.dmFileDescr.LastIndexOf(".", StringComparison.InvariantCultureIgnoreCase);
 

ou

 int pos = file.dmFileDescr.LastIndexOf(".", StringComparison.OrdinalIgnoreCase);
 

273voto

Guffa Points 308133

Ni code, c'est toujours mieux. Ils font des choses différentes, de sorte qu'ils sont bon à différentes choses.

InvariantCultureIgnoreCase utilise les règles de comparaison basé sur l'anglais, mais sans aucune des variations régionales. Ce qui est bon pour un neutre comparaison qui prend toujours en compte certains aspects linguistiques.

OrdinalIgnoreCase compare les codes de caractères sans les aspects culturels. C'est bon pour les comparaisons exactes, comme les mots de passe, mais pas pour le tri des chaînes de caractères avec des caractères inhabituels comme é ou ö. C'est aussi plus rapide car il n'existe pas de règles supplémentaires à appliquer avant de les comparer.

61voto

Sky Sanders Points 19557

FXCop généralement préfère OrdinalIgnoreCase. Mais que vos besoins peuvent varier.

Pour l'anglais il y a très peu de différence. C'est quand vous vous promenez dans des langues différentes de la langue écrite des constructions que cela devient un problème. Je ne suis pas assez expérimenté pour vous donner plus que cela.

OrdinalIgnoreCase

Le StringComparer renvoyé par la OrdinalIgnoreCase bien traite les caractères dans les chaînes de comparer les comme si elles étaient converties pour les majuscules en utilisant les conventions de l'invariant de la culture, puis effectue une simple comparaison octet qui est indépendant de la langue. Ce qui est le plus approprié lors de l' la comparaison des chaînes de caractères qui sont générés par programme ou lors de la comparaison de la casse, des ressources telles que les chemins et noms de fichiers. http://msdn.microsoft.com/en-us/library/system.stringcomparer.ordinalignorecase.aspx

InvariantCultureIgnoreCase

Le StringComparer renvoyé par la InvariantCultureIgnoreCase propriété compare les chaînes de caractères dans un environnement linguistique d'une manière pertinente, qui ignore la casse, mais il n'est pas approprié pour l'affichage dans toute culture particulière. Ses principaux l'application est à l'ordre des chaînes dans une manière qui sera identique à travers les les cultures. http://msdn.microsoft.com/en-us/library/system.stringcomparer.invariantcultureignorecase.aspx

L'invariant de la culture, l' CultureInfo objet retourné par la InvariantCulture de la propriété.

Le InvariantCultureIgnoreCase propriété renvoie en fait un exemple d'une classe anonyme dérivée de la StringComparer classe.

51voto

Hans Kesting Points 17043

Si vous voulez vraiment faire correspondre uniquement le point, alors CultureInfo.Ordinal sera le plus rapide, car il n'y a pas de différence de casse.

17voto

Dean Harding Points 40164

Vous semblez faire des comparaisons de nom de fichier, donc je voudrais juste ajouter que est *plus proche de vous* à ce que fait le NTFS (c' est pas exactement la même chose, mais c’est plus proche que )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X