2009-01-28 8 views

Répondre

3

J'ai trouvé un morceau de code here qui fait le travail bien en ajoutant une méthode d'extension à IDictionary:

using System.Collections.Generic; 

namespace MyNamespace { 
    public static class DictionaryExtensions { 
     public static V GetValue<K, V>(this IDictionary<K, V> dict, K key) { 
      return dict.GetValue(key, default(V)); 
     } 

     public static V GetValue<K, V>(this IDictionary<K, V> dict, K key, V defaultValue) { 
      V value; 
      return dict.TryGetValue(key, out value) ? value : defaultValue; 
     } 
    } 
} 
+0

Vous pouvez le faire en un seul méthode en utilisant les paramètres par défaut: 'public static V GetValue (ce IDictionary dict, clé K, V defaultValue = défaut (V));' –

0

La meilleure façon est d'utiliser TryGetValue, un moyen possible est en faisant:

 

    int default = 5; 
    string key = "MyKey"; 
    int foo = 0; 
    defaultValue = 5; 
    (myDictionary.TryGetValue(key, out foo))?return foo: return defaultValue; 
 

Si vous essayez d'obtenir une valeur qui n'est pas présente, TryGetValue renvoie false, ce qui signifie que vous utilisez la seconde partie de la clause.

Vous pouvez également décider de définir foo à sa valeur par défaut, utiliser TryGetValue et retourner foo dans tous les cas.

+0

Et pourquoi avez-vous aimez mieux qu'un méthode d'extension à IDictionary? (Je suis sérieusement curieux ici, ne pas essayer d'attaquer votre solution) –

+0

de mon point de vue est de verbeux, je sous-entends que vous préférez ajouter l'extension si vous savez que vous utiliserez beaucoup la valeur par défaut. Je ne suis pas sûr que les méthodes devraient être statiques ... – mandel

Questions connexes