Wiele odpowiedzi na pytanie "Multi value Dictionary" proponuje użycie niezmiennej klasy jako TValue
w klasie Dictionary<TKey, TValue>
.Dlaczego używałbyś niezmiennej wartości w słowniku?
Przyjęty Jon Skeet's answer proponuje klasę Pair
z właściwości tylko do odczytu i @teedyay's answer używać niezmienny Tuple
.
Jakie są przesłanki (lub możliwe korzyści) takich podejść?
i zabezpieczenia pytanie:
Dlaczego to make TFirst and TSecond readonly jeśli odpowiednie właściwości pierwszego i drugiego nie mają ustawiaczy anyway:
private readonly TFirst first;
private readonly TSecond second;
public TFirst First
{
get { return first; }
}
public TSecond Second
{
get { return second; }
}
Aktualizacja:
Używam słowniki z niestandardowych klas dla wartości w nich.
I va lues są aktualizowane.
Jakie są możliwe powody (korzyści) dla mnie, aby stały się niezmienne?
widzę, że Lookup<TKey, TElement> Class
jest niezmienna i myśli, że tęsknię za pewne korzyści ze stosowania zapytań LINQ (?)
Jeśli tak, możesz podać mi przykłady czego tęsknię?
Najpierw może nie być ustawiacza, ale nie ogranicza to bezpośredniego ustawienia, jeśli nie jest on tylko do odczytu. – Robert
Jeśli chodzi o odpowiedź od teedyay, to może być tak, że niezmienność 'Tuple' jest przypadkowa, a' Tuple' jest po prostu najprostszym sposobem powiązania dwóch wartości razem. Możliwe, że jest to również przypadkowe w odpowiedzi Jona Skeeta, gdy pisał kod typu "Pair", który napisał na inną okazję. –
Zgadzam się z @DanielFischer, po prostu uważam, że było to przypadkowe dla rozmowy, zwłaszcza że jego implementacja zapewnia zastąpienie GetHashCode. Istnieją ostrzeżenia o nadpisywaniu GetHashCode na zmienne typy. –