71 votes

Dictionnaire c #: rendre la clé insensible à la casse par les déclarations

J'ai un Dictionary<string, object> dictionnaire. Il sert à être Dictionary<Guid, object> mais d'autres identificateurs d'' sont entrés en jeu et les Touches sont maintenant traités comme des chaînes.

Le problème est que l' Guid clés de ma source de données viens VarChar, alors maintenant, la clé de l' "923D81A0-7B71-438d-8160-A524EA7EFA5E" n'est pas le même que "923d81a0-7b71-438d-8160-a524ea7efa5e" (n'était pas un problème lors de l'utilisation de Guid).

Ce qui est vraiment sympa (et doux) à propos de l' .NET framework est que je peux faire ceci:

Dictionary<string, CustomClass> _recordSet = new Dictionary<string, CustomClass>(
    StringComparer.InvariantCultureIgnoreCase);

Et qui fonctionne très bien. Mais qu'en est imbriqué dans le Dictionnaire? Comme suit:

Dictionary<int, Dictionary<string, CustomClass>> _customRecordSet 
    = new  Dictionary<int, Dictionary<string, CustomClass>>();

Comment aurais-je spécifier la chaîne de comparer sur un imbriquée dictionnaire de ce genre?

78voto

Adam Houldsworth Points 38632

Lorsque vous ajoutez un élément au dictionnaire externe, vous allez probablement créer une nouvelle instance du dictionnaire imbriqué, ajoutez-le à ce stade, en utilisant le constructeur surchargé qui prend IEqualityComparer<TKey> .

_customRecordSet.Add(0, new Dictionary<string, CustomClass>(StringComparer.InvariantCultureIgnoreCase));

8voto

Patrick Points 838

Vous allez devoir initialiser les dictionnaires imbriqués pour pouvoir les utiliser. Utilisez simplement le code que vous avez ci-dessus à ce stade.

En gros, vous devriez avoir un code comme celui-ci:

 public void insert(int int_key, string guid, CustomClass obj)
{
    if (_customRecordSet.ContainsKey(int_key)
         _customRecordSet[int_key][guid] = obj;
    else
    {
         _customRecordSet[int_key] = new Dictionary<string, CustomClass> 
                                     (StringComparer.InvariantCultureIgnoreCase);
         _customRecordSet[int_key][guid] = obj;
    }
}
 

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