Sollte ich überprüfen, ob ein bestimmter Schlüssel in Wörterbuch vorhanden ist, wenn ich sicher bin, dass es im Wörterbuch hinzugefügt wird, bis ich den Code erreiche, um darauf zuzugreifen?Sollte ich vor dem Zugriff prüfen, ob ein bestimmter Schlüssel im Wörterbuch vorhanden ist?
Es gibt zwei Möglichkeiten, wie ich den Wert im Wörterbuch zugreifen kann
- Überprüfung ContainsKey Methode. Wenn es wahr zurückgibt, dann greife ich auf Indexer [Schlüssel] des Wörterbuchobjekts zu.
oder
- TryGetValue, die wahr oder falsch sowie Rückgabewert durch out-Parameter zurück.
(2. wird als erstes eine bessere Leistung, wenn ich Wert erhalten möchten. Benchmark.)
Allerdings, wenn ich sicher bin, dass die Funktion, die sicherlich den Schlüssel wird die globale Wörterbuch zugreift dann sollte ich noch überprüfen mit TryGetValue oder ohne Überprüfung sollte ich den Indexer [] verwenden.
Oder sollte ich das nie annehmen und immer überprüfen?
Ein fehlender Schlüssel ist oft ein Hinweis auf ein anderes Problem. Wenn Sie wissen, was das Problem ist und eine nützlichere Nachricht bereitstellen können, sollten Sie in Betracht ziehen, eine eigene Ausnahme auszulösen, da die Nachricht, die 'KeyNotFoundException" begleitet, manchmal schwierig einzugrenzen ist. –
Es wäre sicherlich nützlich, wenn KeyNotFoundException den Schlüssel auch gab - aber ansonsten reicht mir normalerweise nur der Stack-Trace. Wie weit würdest du das nehmen: jede mögliche NULL-Referenz (nicht nur Argumente, sondern Dinge, von denen du erwartest, dass sie nicht null sind) auf Nichtigkeit prüfen und eine eigene Ausnahme auf jede davon werfen? Bei internen Inkonsistenzen gibt es immer Ausnahmen, die von Teilen des Frameworks ausgelöst werden: Wenn Sie versuchen, jeden einzelnen davon zu antizipieren, geht der Code mehr über die Fehlerfälle als über Fortschritte. –