2009-12-02 3 views
2

Comment mettre en œuvre une comparaison insensible à la casse?Comparaison insensible à la casse

List<Person> persons = new List<Person>(); 
persons.Add(new Person("P005", "Janson")); 
persons.Add(new Person("P002", "Arnold")); 
persons.Add(new Person("P007", "Kazhal")); 
persons.Sort((p1, p2) => p1.Name.CompareTo(p2.Name)); 

Répondre

20
persons.Sort((p1, p2) => string.Compare(p1.Name, p2.Name, true)); 
1

Utilisez new CaseInsensitiveComparer().CompareTo(str1, str2)

6

Voulez-vous dire pour cordes? Dans ce cas, vous pouvez the overload of the Compare-Funciton qui accepte un troisième paramètre, un booléen qui détermine au cas sesnsitivity:

String.Compare(
    string1, // String 1 
    string2, // String 2 
    true  // IgnoreCase 
); 

Ou, si vous voulez, mais je ne vois pas pourquoi, vous pouvez aller le chemin très sale. ..

string1.ToLower() == string2.ToLower() 

De l'autre côté, si vous êtes très srious sur la comparaison de ces chaînes, vous pouvez utiliser ceci:

string1.ToUpper() == string2.ToUpper() 
+0

La façon sale échouera s'il y a même une valeur nulle pour ou string1 string2 dans la collection –

+0

@Russell Steen: null-sécurité n'a pas été une exigence. ;) – Bobby

1

vous pourrait simplement appeler

p1.Name.ToLower().CompareTo(p2.Name.ToLower()) 

pour une implémentation rapide. Probablement pas la meilleure solution à long terme cependant.

2
"abc".Equals("ABC", StringComparison.OrdinalIgnoreCase)