Devo controllare se una determinata chiave è presente nel dizionario se sono sicuro che verrà aggiunta nel dizionario quando raggiungo il codice per accedervi?Devo verificare se una determinata chiave è presente nel dizionario prima di accedervi?
Ci sono due modi posso accedere al valore nel dizionario
- controllo metodo ContainsKey. Se restituisce true, accedo utilizzando l'indexer [chiave] dell'oggetto dizionario.
o
- TryGetValue che restituirà vero o falso, così come valore di ritorno tramite il parametro fuori.
(2 ° si esibirà meglio di prima, se voglio ottenere il valore. Benchmark.)
Tuttavia, se sono sicuro che la funzione che accede dizionario globale avranno sicuramente la chiave allora dovrei comunque controllare usando TryGetValue o senza controllare dovrei usare indexer [].
Oppure non dovrei mai presumere questo e controllare sempre?
Una chiave mancante è spesso un'indicazione di un altro problema. Se sai qual è il problema e puoi fornire un messaggio più utile, dovresti considerare di lanciare la tua eccezione poiché il messaggio che accompagna "KeyNotFoundException" è difficile da restringere a volte. –
Sarebbe certamente utile se KeyNotFoundException desse anche la chiave - ma a parte questo, solo la traccia dello stack è normalmente sufficiente per me. Quanto lontano faresti questo: controllando ogni possibile riferimento null (non solo argomenti, ma cose che ti aspetti internamente di non-null) per nullità e lanciando un'eccezione personalizzata su ognuna di quelle? Ci saranno sempre delle eccezioni generate da frammenti del framework nei casi di incoerenza interna: se si tenta di anticipare ognuno di essi, il codice finisce per essere più relativo ai casi di errore che a fare progressi. –