Junior — Middle
Jak można uniknąć ograniczenia rozmiaru lub ograniczenia przy użyciu klucza w słowniku?
sobes.tech AI
Odpowiedź od AI
W C# słowniki (Dictionary<TKey, TValue>) mają ograniczenia dotyczące typów kluczy i ich rozmiaru, na przykład klucz musi być haszowalny i mieć poprawnie zaimplementowane metody GetHashCode i Equals.
Aby uniknąć ograniczeń rozmiaru lub typu klucza, można:
- Używać kluczy złożonych, na przykład tworzyć klasę lub strukturę łączącą kilka wartości i zaimplementować dla niej poprawne metody
GetHashCodeiEquals. - Zamieniać duże lub skomplikowane klucze na bardziej kompaktowe reprezentacje, na przykład serializować obiekt do ciągu znaków lub używać funkcji hash.
- Używać specjalistycznych kolekcji lub struktur danych, jeśli standardowy słownik nie jest odpowiedni.
Przykład klucza złożonego:
struct CompositeKey
{
public int Id;
public string Name;
public override bool Equals(object obj) => obj is CompositeKey other && Id == other.Id && Name == other.Name;
public override int GetHashCode() => HashCode.Combine(Id, Name);
}
var dict = new Dictionary<CompositeKey, string>();
dict[new CompositeKey { Id = 1, Name = "Test" }] = "Value";