Często znajduję się przy tworzeniu Dictionary
z nietrywialną klasą wartości (np. List
), a następnie zawsze zapisuję ten sam wzór kodu podczas wypełniania danych.Słownik .NET: pobierz lub utwórz nowy
Na przykład:
var dict = new Dictionary<string, List<string>>();
string key = "foo";
string aValueForKey = "bar";
Oznacza to, że chcę wstawić "bar"
na listę, która odpowiada kluczowym "foo"
, gdzie klucz "foo"
nie może być przypisane do niczego.
To gdzie używam stale powtarzający się wzór:
List<string> keyValues;
if (!dict.TryGetValue(key, out keyValues))
dict.Add(key, keyValues = new List<string>());
keyValues.Add(aValueForKey);
Czy istnieje bardziej elegancki sposób to zrobić?
Podobne pytania, które nie mają odpowiedzi na to pytanie:
- Is there an IDictionary implementation that returns null on missing key instead of throwing?
- Find-or-insert with only one lookup in c# dictionary
- Dictionary returning a default value if the key does not exist
Co jeśli klucz istnieje, ale lista ma wartość zerową? –
@Barabba Ogólnie rzecz biorąc sądzę, że dodanie wartości pustej byłoby niewłaściwe, a użytkownik * spodziewałby się *, że kod po prostu zbankrutuje i naprawi błąd dodania pustego klucza, nie próbując go obsłużyć tutaj. – Servy
@Servy ok, ale co, jeśli otrzymamy listę wyników z zewnętrznego źródła? Jedyną rzeczą, która sobie z tym poradzi, to radzić sobie z wartościami zerowymi, czy jestem w błędzie? Zdarza mi się to każdego dnia :) –