2012-12-21 17 views
6

Ho trovato molte informazioni sul Web che rendono i dizionari in grado di eseguire ricerche senza distinzione tra maiuscole e minuscole tali che aggiungendo una coppia chiave/valore di ("A", "valore") chiamandoChiavi del dizionario sensibili al maiuscolo/minuscolo

MyDict["a"] == MyDict["A"] 

restituirà true.

Quello che voglio sapere è perché ottengo un errore "chiave è già stato aggiunto" quando faccio

MyDict.Add("A", "value1"); 
MyDict.Add("a", "value2"); 

se ho definito il mio dizionario di fare maiuscole e minuscole look-up. Non esiste un modo per definire un dizionario in modo da poter aggiungere chiavi cased differenti?

+3

Funziona bene per me. Sei sicuro di operare su un dizionario vuoto? – Mir

+0

Potresti fornire un esempio di codice completo (eseguibile) che mostri il problema che hai? –

risposta

9

I dizionari distinguono tra maiuscole e minuscole per impostazione predefinita: non è necessario fare nulla.

Dictionary<string, string> myDict = new Dictionary<string, string>(); 
myDict.Add("A", "value1"); 
myDict.Add("a", "value2"); 

vedere il tuo codice di lavoro on-line qui: ideone.

Se si verifica un errore nel codice, è perché una di quelle chiavi esiste già nel dizionario.

+0

Esiste già (significa che ho bisogno di caffè), sfortunatamente devo creare manualmente un grosso dizionario con una tonnellata di valori e non ho tenuto conto della possibilità di duplicati in arrivo. Grazie, anche io non ho mai visto ideone prima quindi grazie anche per questo. – spots

6

Tutti Dictionaries sono case-sensitive. Tuttavia, è possibile utilizzare i comparatori di stringa senza distinzione tra maiuscole e minuscole forniti dalla classe StringComparer per creare dizionari con chiavi stringa senza distinzione tra maiuscole e minuscole.

Verificare da ideone.

1

L'OP è effettivamente corretto se stava usando la classe StringDictionary. Il sito di Microsoft afferma che la chiave viene convertita in minuscolo prima che venga memorizzata (https://msdn.microsoft.com/en-us/library/system.collections.specialized.stringdictionary(v=vs.110).aspx). Per rendere sensibile la distinzione tra maiuscole e minuscole, utilizzare il dizionario generico come Mark Byers suggerito funziona bene. Se si desidera una chiave senza distinzione tra maiuscole e minuscole, StringDictionary funziona correttamente.

Problemi correlati