web-dev-qa-db-fra.com

Dictionnaire sensible à la casse avec chaîne type-clé en C #

Si j'ai un Dictionary<String,...> est-il possible de créer des méthodes comme ContainsKey sans distinction de casse?

Cela semblait lié, mais je ne le comprenais pas bien: Dictionnaire c #: rendre la clé insensible à la casse par les déclarations

130
Mr. Boy

Cela semblait lié, mais je ne le comprenais pas bien: Dictionnaire c #: rendre la clé insensible à la casse par les déclarations

C'est en effet lié. La solution consiste à indiquer à l'instance de dictionnaire de ne pas utiliser la méthode de comparaison de chaînes standard (sensible à la casse), mais plutôt d'utiliser une méthode sensible à la casse. Ceci est fait en utilisant le constructeur approprié :

var dict = new Dictionary<string, YourClass>(
        StringComparer.InvariantCultureIgnoreCase);

Le constructeur attend un IEqualityComparer qui indique au dictionnaire comment comparer les clés.

StringComparer.InvariantCultureIgnoreCase vous donne une instance IEqualityComparer qui compare les chaînes sans tenir compte de la casse.

263
Konrad Rudolph
var myDic = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase);
myDic.Add("HeLlo", "hi");

if (myDic.ContainsKey("hello"))
    Console.WriteLine(myDic["hello"]);
19
Steve

Il y a peu de chances que votre dictionnaire soit tiré d'un fichier tiers ou d'une DLL externe. Utilisation de linq

YourDictionary.Any(i => i.KeyName.ToLower().Contains("yourstring")))

10
Kurkula