267 votes

Comment puis-je comparer les chaînes sans tenir compte de la casse?

Comment puis-je rendre la ligne ci-dessous insensible à la casse?

 drUser["Enrolled"] = (enrolledUsers.FindIndex(x => x.Username == (string)drUser["Username"]) != -1);
 

On m'a donné un conseil plus tôt aujourd'hui suggérant d'utiliser:

 x.Username.Equals((string)drUser["Username"], StringComparison.OrdinalIgnoreCase)));
 

le problème est que je ne parviens pas à faire fonctionner cela. J'ai essayé la ligne ci-dessous. Cette opération compile mais renvoie les résultats erronés. Elle renvoie les utilisateurs inscrits en tant qu'utilisateurs non inscrits et inscrits.

 drUser["Enrolled"] = (enrolledUsers.FindIndex(x => x.Username.Equals((string)drUser["Username"], StringComparison.OrdinalIgnoreCase)));
 

Quelqu'un peut-il signaler le problème?

488voto

ocean4dream Points 914

Ce n'est pas la meilleure pratique .NET framework (4 et+), pour vérifier l'égalité

String.Compare(x.Username, (string)drUser["Username"], StringComparison.OrdinalIgnoreCase) == 0

Utilisez plutôt la syntaxe suivante

String.Equals(x.Username, (string)drUser["Username"], StringComparison.OrdinalIgnoreCase) 

MSDN recommande:

  • Utiliser une surcharge de la Chaîne.Méthode Equals pour tester si deux les chaînes sont égales.
  • L'utilisation de la Chaîne.Comparez et Chaîne.CompareTo méthodes pour trier les chaînes, de ne pas vérifier l'égalité.

37voto

Oleg Points 136406

Vous devriez utiliser la fonction statique String.Compare comme suit

 x => String.Compare (x.Username, (string)drUser["Username"],
                     StringComparison.OrdinalIgnoreCase) == 0
 

1voto

decyclone Points 18778

Que diriez-vous d'utiliser StringComparison.CurrentCultureIgnoreCase place?

-12voto

user3895427 Points 11

vous pouvez toujours utiliser les fonctions :. ToLower() ;. ToUpper() ;

convertir vos chaînes et de les comparer ensuite...

Bonne chance

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