Quando ho iniziato a programmare in C# l'anno scorso, ho immediatamente cercato l'equivalente della mappa di STL e ho imparato a conoscere il dizionario.Qualcuno può spiegare perché Dictionary <> in C# non funziona come la mappa <T,U> in STL?
AGGIORNAMENTO barrato questa spazzatura di seguito, ho sbagliato completamente. La mia esperienza con la mappa di STL era che odiavo quando lo richiedevo per un valore, e se la chiave non era nella mappa, creava automaticamente il tipo di valore (qualunque fosse il suo costruttore predefinito) e lo aggiungeva alla mappa. Dovrei quindi verificare questa condizione nel codice e generare un'eccezione.
Dizionario <> ottiene l'intero shebang corretto - se la chiave non è presente, genera un'eccezione se stai richiedendo il valore, o lo aggiunge automaticamente se non lo è e vuoi impostare il valore.
Ma lo sapevate già tutti. Avrei dovuto scrivere i miei test unitari prima di postare qui e imbarazzarmi. :) Sono scritti ora!
Ora mi piace Dizionario e tutto, ma la cosa che mi bug più su di esso adesso è che se la chiave non è presente nel dizionario, si getta una KeyNotFoundException. Pertanto, ho sempre bisogno di scrivere codice come questo:
Dictionary<string,string> _mydic;
public string this[string key]
{
get {
return _mydic[key]; // could throw KeyNotFoundException
}
set {
if(_mydic.ContainsKey(key))
_mydic[key] = value;
else
_mydic.Add(key, value);
}
}
Perché non a Dizionario automaticamente aggiungere la coppia valore della chiave se la chiave non esiste, come la mappa di STL?
Ora la cosa divertente è che in una vita precedente, ho usato per ottenere infastidito perché avevo spesso devono cercare di evitare mappa da fare proprio questo. Suppongo che i miei casi d'uso adesso siano un po 'diversi.
La mia risposta istintiva sarebbe dovuta al fatto che 'Dictionary' non è mai stato progettato per replicare la 'mappa STL '. –
Sono sicuro che non lo fosse, ma sono solo curioso del perché hanno deciso di non progettarlo per comportarsi in modo simile in assenza della chiave specificata. – Dave
Penso che tu abbia smarrito alcune istruzioni che dovrebbero essere sul getter all'interno del setter. –