Znajduję w logach podczas operacji dodawania Dictionary.Add()
wyjątek
"Element z tym samym kluczem został już dodany'"
Zykle to robi się operatorem []
i wtedy nie ma wyjątku.
Co zamierzał autor i co wtedy jarał ?
Znajduję w logach podczas operacji dodawania Dictionary.Add()
wyjątek
"Element z tym samym kluczem został już dodany'"
Zykle to robi się operatorem []
i wtedy nie ma wyjątku.
Co zamierzał autor i co wtedy jarał ?
System.Collections.Concurrent.ConcurrentDictionary<>
ma AddOrUpdate()
Pomysł był taki aby była metoda która wykryje (rzuci wyjątkiem) że w danych masz błąd.
Ale
dictionary[a]=b;
to nie to samo co
dictionary.Add(a,b);
Ale rozumiem, że to wiesz i pytasz dlaczego ktoś tak to wymyślil? ;-)
Dictionary się używa przez []
. Add
zostało prawdopodobnie dodane dla inicjalizacji z ducktypingiem. Każda klasa może implementować IEnumerable
i mieć metodę Add
i wtedy można do niej dodawać elementy w ten sposób:
new Klasa
{
"a", "b", "c"
}
Dzięki temu możesz utworzyć Dictionary podając parę klucz, wartość. Dzięki temu że rzuca exception łatwiej znaleźć niezamierzony błąd kiedy dwa razy próbujesz dodać ten sam klucz:
new Dictionary<int, string> {
{ 1, "111" },
{ 2, "222" },
{ 3, "333" },
{ 1, "444" }
};
od którejś tam wersji dodali możliwość tworzenia dictionary przez
new Dictionary<int, string> {
[1] = "111",
[2] = "222",
[1] = "333"
}
i tu już nie rzuca exceptiona, zapewne możnaby było już usunąć metodę Add
ale to by zerwało wsteczną kompatybilność.
W skrócie - nie używaj
obscurity napisał(a):
Dictionary się używa przez
[]
.Add
zostało prawdopodobnie dodane dla inicjalizacji z ducktypingiem. Każda klasa może implementowaćIEnumerable
i mieć metodęAdd
i wtedy można do niej dodawać elementy w ten sposób:
IEnumerable
nie definiuje metody Add()
. W przypadku słownika ta metoda jest definiowana przez IDictionary
, ten sam interfejs definiuje odwołanie przy użyciu klucza ([]
)
Jestem święcie przekonany, że słownika używa się w taki sposób jaki jest to konieczne. Czasem trzeba mieć pewność, że próba aktualizacji wartości dla jakiegoś klucza rzuci wyjątkiem i wtedy Add()
spisuje się doskonale.
to jest takie standardowe zachoanie
Add to dodanie i koniec
[] - ma dwa znaczenia - add or change
bodajże w cpp jest taka sama logika jeśli chodzi o []
nic niezwykłego
z czym problem?
Używanie kolekcji to tak najdalej 5 rozdział książki do nauki języka.
somekind napisał(a):
Używanie kolekcji to tak najdalej 5 rozdział książki do nauki języka.
Copyright (c) by ZrobieDobrze, ale primary author pisze o pierwszych 10 kartkach ;)