2011-06-15 8 views
7

He pasado un par de horas tratando de descubrir por qué mi diccionario genérico (Of String, String) no está ignorando el caso.Diccionario insensible a mayúsculas/minúsculas no funciona

Aquí está mi código:

Dim test As New System.Collections.Generic.Dictionary(Of String, String)(System.StringComparison.OrdinalIgnoreCase) 
test.Add("FROG", "1") 
Console.WriteLine(test.ContainsKey("frog")) 

La consola muestra "falso" cada vez. Debería mostrar "Verdadero".

si uso:

Console.WriteLine(test."frog")) 

consigo un KeyNotFoundException.

Parece que el parámetro Comparer se ignora por completo.

¿Qué está pasando?

Respuesta

14

Como insinuó here, es un error de ortografía simple.

El problema es Sistema. StringComparison .OrdinalIgnoreCase es un entero Enum.
Debería ser Sistema. StringComparer .OrdinalIgnoreCase

Nueva System.Collections.Generic.Dictionary (De String, String) (System.StringComparison.OrdinalIgnoreCase) es en realidad llamando a la Nueva (capacidad como número entero) constructor sobrecargado, y pasando 5 .

lo tanto, para hacer que todo funcione como se esperaba, la línea de instancias debe decir:

Dim test As New System.Collections.Generic.Dictionary(Of String, String)(System.StringComparer.OrdinalIgnoreCase) 
+1

Wow buen ojo y ahora recuerdo por qué no puedo soportar la conversión implícita. – Josh

Cuestiones relacionadas