Si tengo un ¿ Dictionary<String,...>
es posible hacer métodos como ContainsKey
mayúsculas y minúsculas?
Esto parecía relacionado, pero no lo entendí correctamente: Diccionario C #: haciendo que la clave no distinga entre mayúsculas y minúsculas a través de declaraciones
c#
collections
generic-collections
Señor chico
fuente
fuente
StringComparer.InvariantCultureIgnoreCase
? Hace lo que dice ...Respuestas:
De hecho está relacionado. La solución es decirle a la instancia del diccionario que no use el método estándar de comparación de cadenas (que distingue entre mayúsculas y minúsculas), sino que utilice uno que no distinga entre mayúsculas y minúsculas. Esto se hace usando el constructor apropiado :
El constructor espera un mensaje
IEqualityComparer
que le dice al diccionario cómo comparar claves.StringComparer.InvariantCultureIgnoreCase
le ofrece unaIEqualityComparer
instancia que compara las cadenas sin distinción entre mayúsculas y minúsculas.fuente
fuente
Hay pocas posibilidades de que su trato con el diccionario que se extrae de terceros o dll externo. Usando linq
YourDictionary.Any(i => i.KeyName.ToLower().Contains("yourstring")))
fuente
Any
aSingleOrDefault
nonull
volverá si no existe, en su lugar obtendrá un par de valores clave con clave y valor establecidosnull
.Contains
Parece un caso de uso muy específico para algo en lo que estaba trabajando en ese momento. Como una respuesta útil más genérica, creo queEquals
es mejor. Y en esa misma nota, en lugar de duplicar una cadena conToLower()
, sería aún mejor usarStringComparison.xxxCase
.dict.Keys.Contains("bla", appropriate comparer)
sobrecarga de LINQ para facilitar su uso.Me encontré con el mismo tipo de problemas donde necesitaba un diccionario caseINsensitive en un controlador ASP.NET Core.
Escribí un método de extensión que hace el truco. Quizás esto también pueda ser útil para otros ...
Para usar el método de extensión:
Luego obtenga un valor del diccionario con:
fuente
Si no tiene control en la creación de la instancia, supongamos que su objeto está desterilizado de json, etc., puede crear una clase de envoltura que herede de la clase de diccionario.
fuente