todas - c#Dictionary: haciendo que la clave no distinga entre mayúsculas y minúsculas mediante declaraciones
solo mayuscula vb net (2)
Cuando agrega un elemento al diccionario externo, es probable que cree una nueva instancia del diccionario anidado, agréguelo en este momento, haciendo uso del constructor sobrecargado que toma un IEqualityComparer<TKey>
.
_customRecordSet.Add(0, new Dictionary<string, CustomClass>(StringComparer.InvariantCultureIgnoreCase));
Actualización 08/03/2017: Anecdóticamente, leo en algún lugar (creo que en "Escribir código .NET de alto rendimiento") que StringComparer.OrdinalIgnoreCase
es más eficiente cuando simplemente se quiere ignorar el caso de los personajes. Esto, sin embargo, es completamente infundado por mí, así que YMMV.
Tengo un Dictionary<string, object>
. Solía ser Dictionary<Guid, object>
pero otros ''identificadores'' han entrado en juego y las Keys ahora se manejan como cadenas.
El problema es que las claves Guid
de mis datos de origen vienen como VarChar
, por lo que ahora una clave de "923D81A0-7B71-438d-8160-A524EA7EFA5E"
no es lo mismo que "923d81a0-7b71-438d-8160-a524ea7efa5e"
( "923d81a0-7b71-438d-8160-a524ea7efa5e"
no es un problema cuando se usan Guids).
Lo que es realmente agradable (y dulce) sobre el framework .NET es que puedo hacer esto:
Dictionary<string, CustomClass> _recordSet = new Dictionary<string, CustomClass>(
StringComparer.InvariantCultureIgnoreCase);
Y eso funciona genial Pero, ¿qué pasa con un diccionario anidado? Como el siguiente:
Dictionary<int, Dictionary<string, CustomClass>> _customRecordSet
= new Dictionary<int, Dictionary<string, CustomClass>>();
¿Cómo puedo especificar el comparador de cadenas en un diccionario anidado como este?
Tendrá que inicializar los diccionarios anidados para usarlos. Solo usa el código que tienes arriba en ese punto.
Básicamente, deberías tener un 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;
}
}