.NET Dictionnaire: obtenir ou de créer de nouvelles

Je me retrouve souvent à la création d'un Dictionnaire avec un non-trivial de valeur classe (par exemple List), puis écrit toujours le même modèle de code lors du remplissage des données.

Par exemple:

var dict = new Dictionary<string, List<string>>();
string key = "foo";
string aValueForKey = "bar";

Qui est, je veux insérer "bar" dans la liste qui correspond à la clé "foo", où les principaux "foo" peut pas être mappé à quoi que ce soit.

C'est là que j'utilise le jamais-motif répété:

List<string> keyValues;
if (!dict.TryGetValue(key, out keyValues))
  dict.Add(key, keyValues = new List<string>());
keyValues.Add(aValueForKey);

Est-il une façon plus élégante de le faire?

Liées à des questions qui n'ont pas de réponses à cette question:

  • Si la clé existe, mais la Liste est nulle?
  • Généralement j'avais pense que l'ajout d'une valeur null être considérés comme inappropriés et que vous attendez le code juste de la bombe et corriger le bug de l'ajout d'une clé null, de ne pas essayer de la traiter ici.
  • ok, mais si nous obtenons une Liste de résultats à partir d'un tiers de la source? La seule chose à faire face est de gérer les valeurs null, ai-je tort? Il m'arrive tous les jours 🙂
  • Alors vous devriez être null vérification de la liste renvoyée ailleurs avant de l'ajouter dans le dictionnaire pour s'assurer que vous n'ajoutez pas de valeur null.
  • bien sûr, null de la vérification de la bonne façon, mais que faire si notre Dictionnaire vient de tiers? Ok, ce scénario n'est pas une fois que décrit ici, mais je préfère un générique à l'épreuve des balles méthode.
  • Alors je serais probablement juste de ne pas utiliser une méthode comme cela dans les rares cas limite de l'utilisation d'un troisième partie du code avec un particulier novice au niveau de bug. Il est incroyablement peu probable que cela arrive, incroyablement facile à trouver quand il le fait (le pointeur null exceptions se démarquer), et incroyablement facile à corriger (seulement ajouter dans le simple null vérifier). Si vous voulez vraiment la méthode elle-même à faire le nul de vérifier, par tous les moyens l'ajouter dans lorsque vous utilisez la méthode, vous êtes libre de le faire. J'ai expliqué pourquoi je pense qu'il serait nuisible dans mon code, mais si vous savez que ça ne s'applique pas à votre base de code, c'est très bien.
  • ok, je suis d'accord. J'utilise souvent TryDoSomething méthodes avec une valeur null de vérifier de retour faux et je ne pense pas que c'est une mauvaise approche. Lorsque cela est possible je fais toujours mes vérifier avant chaque genre de méthode/fonctionnement/fonction, mais je ne me sens jamais bien sûr dû à noob de la troisième partie du code 🙂 Merci pour le partage de votre point de vue.
  • Connexes: stackoverflow.com/questions/3705950/...

InformationsquelleAutor Rok Strniša | 2013-04-24