49 votos

c# Diccionario: hacer que la Tecla de mayúsculas y minúsculas a través de declaraciones

Tengo un Dictionary<string, object> diccionario. Lo que solía ser Dictionary<Guid, object> pero otros 'identificadores' han entrado en juego y las Claves son ahora manejados como cadenas.

El problema es que el Guid llaves de mi fuente de datos están llegando como VarChar, por lo que ahora la llave de la "923D81A0-7B71-438d-8160-A524EA7EFA5E" no es lo mismo que "923d81a0-7b71-438d-8160-a524ea7efa5e" (no era un problema cuando se utiliza el Guid).

Lo que es realmente bonito (y dulce) acerca de el .NET framework es que puedo hacer esto:

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

Y que funciona muy bien. Pero, ¿qué acerca de un anidada Diccionario? Como la siguiente:

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

¿Cómo puedo especificar la cadena comparador en un anidada diccionario como este?

53voto

Adam Houldsworth Puntos 38632

Cuando se agrega un elemento a la zona exterior de diccionario, es probable que usted tendrá que crear una nueva instancia de la anidados diccionario, agregar en este punto, haciendo uso de la sobrecarga del constructor que toma un IEqualityComparer<TKey>.

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

6voto

Patrick Puntos 838

Usted va a tener que inicializar el anidado de los diccionarios con el fin de utilizarlas. Simplemente use el código de arriba en ese momento.

Básicamente, usted debe tener algún código como este:

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;
    }
}

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X