Sobes.tech
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 GetHashCode i Equals.
  • 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";