Comparer deux chaînes, en ignorant la casse dans c #

Duplication possible:
Quelle est la différence entre les différentes méthodes de comparaison de chaînes

Lequel des deux suivants est le plus efficace? (Ou peut-être y a-t-il une troisième option qui soit encore meilleure?)

ssortingng val = "ASsortingngValue"; if (val.Equals("assortingngvalue", SsortingngComparison.InvariantCultureIgnoreCase)) 

OU

 if (val.ToLowerCase() == "assortingngvalue") 

?

Le premier est le bon, et IMHO le plus efficace, puisque la deuxième “solution” instancie une nouvelle instance de chaîne.

Si vous recherchez l’efficacité, utilisez ceci:

 ssortingng.Equals(val, "assortingngvalue", SsortingngComparison.OrdinalIgnoreCase) 

Les comparaisons ordinales peuvent être beaucoup plus rapides que les comparaisons tenant compte de la culture.

ToLowerCase peut être la meilleure option si vous faites beaucoup de comparaisons avec la même chaîne.

Comme pour toute optimisation des performances: mesurez-le, puis décidez!

La version .ToLowerCase ne va pas être plus rapide – elle implique une allocation de chaîne supplémentaire (qui doit ensuite être collectée), etc.

Personnellement, j’utiliserais

 ssortingng.Equals(val, "assortingngvalue", SsortingngComparison.OrdinalIgnoreCase) 

cela évite tous les problèmes des chaînes sensibles à la culture, mais évite par conséquent tous les problèmes liés aux chaînes sensibles à la culture . Vous seul savez si cela est correct dans votre contexte.

L’utilisation de la méthode statique ssortingng.Equals évite tout problème avec val étant null .

Ma réponse générale à ce type de question sur «l’efficacité» est presque toujours la plus efficace, quelle que soit la version du code la plus lisible.

Cela étant dit, je pense (val.ToLowerCase() == "assortingngvalue") est assez compréhensible d’un coup d’œil par la plupart des gens.

L’efficacité dont je parle n’est pas nécessairement liée à l’exécution du code, mais plutôt à la maintenance et à la lisibilité du code en question.

Je m’aventurerais que le plus sûr est d’utiliser Ssortingng.Equals pour limiter la possibilité que val soit null .

Le premier est le plus rapide. Il s’avère que val est immuable, et donc un nouvel object chaîne est créé avec Ssortingng.ToLowerCase (), plutôt que simplement une comparaison directe avec le comparateur de chaînes. Créer un nouvel object chaîne peut être coûteux si vous le faites plusieurs fois par seconde.

vous voudrez peut-être aussi regarder cela déjà répondu à la question Différences dans les méthodes de comparaison de chaînes en C #

1st est plus efficace (et la meilleure option possible) car val.ToLowerCase() crée un nouvel object car les chaînes sont immuables.