C # optimale IDictionary-Verwendung für die Suche mit der Möglichkeit, nicht gefunden zu werden

8

Nehmen wir an, ich habe eine Methode wie folgt:

%Vor%

Aber der obige Code hat zwei Suchvorgänge im Wörterbuch:

  1. Der Test auf die Existenz des Schlüssels
  2. Das tatsächliche Abrufen des Werts

Gibt es einen optimaleren Weg, eine solche Funktion zu formulieren, so dass nur eine Suche durchgeführt wird, aber der Fall "nicht gefunden" noch immer über eine Nullrückgabe behandelt wird (d. h. nicht über eine nicht gefundene Ausnahme)?

Es wäre zum Beispiel schön gewesen, wenn die Suche nach dem Schlüssel eine Art Iterator zurückgegeben hätte, der zum Abrufen des Werts oder eines ungültigen Iterators verwendet werden könnte, wenn der Wert nicht wie in C ++ gefunden wurde. Vielleicht hat C # aufgrund seiner Sprachmerkmale einen besseren Weg dazu.

    
Michael Goldshteyn 28.02.2012, 15:55
quelle

3 Antworten

16

Die Methode TryGetValue wurde für genau dieses Szenario entwickelt - um die beiden Nachschlagevorgänge zu vermeiden Operationen.

  

Diese Methode kombiniert die Funktionalität der ContainsKey-Methode und   die Item-Eigenschaft.

     

Wenn der Schlüssel nicht gefunden wird, erhält der value-Parameter das passende   Standardwert für den Werttyp TValue.

     

[...] Verwenden Sie die TryGetValue-Methode, wenn Ihr Code häufig versucht, darauf zuzugreifen   Schlüssel, die nicht im Wörterbuch enthalten sind. Mit dieser Methode ist mehr   effizienter als das Abfangen der KeyNotFoundException, die vom Element ausgelöst wird   Eigenschaft.

%Vor%     
Ani 28.02.2012, 15:57
quelle
2

SPFiredrakes Idee eingeben ...

%Vor%

so benutzt

%Vor%

Natürlich sollten Sie jetzt überprüfen, ob Ihre Werte null sind, weshalb das .Net-Team diese Funktion möglicherweise weggelassen hat.

    
Jodrell 28.02.2012 17:11
quelle
1

Sie sollten stattdessen TryGetValue verwenden - es wird eine einzelne Suche verwendet.

%Vor%

Der Aufruf ist kurz genug, um "inline" zu verwenden, ohne eine Wrapper-Funktion hinzuzufügen. TryGetValue gibt eine bool zurück, die angibt, ob die Suche erfolgreich war oder nicht.

    
dasblinkenlight 28.02.2012 15:57
quelle

Tags und Links