Si tengo un ¿ Dictionary<String,...>es posible hacer métodos como ContainsKeymayú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
IEqualityComparerque le dice al diccionario cómo comparar claves.StringComparer.InvariantCultureIgnoreCasele ofrece unaIEqualityComparerinstancia 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
AnyaSingleOrDefaultnonullvolverá si no existe, en su lugar obtendrá un par de valores clave con clave y valor establecidosnull.ContainsParece 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 queEqualses 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