Sobes.tech
Junior — Middle

Come si può evitare la limitazione di dimensione o restrizione nell'uso di una chiave in un dizionario?

sobes.tech AI

Risposta dell'AI

In C#, i dizionari (Dictionary<TKey, TValue>) hanno restrizioni sui tipi di chiavi e sulla loro dimensione, ad esempio, la chiave deve essere hashabile e avere metodi GetHashCode e Equals correttamente implementati.

Per evitare restrizioni di dimensione o tipo di chiave, puoi:

  • Utilizzare chiavi composte, ad esempio, creare una classe o struttura che combina più valori e implementare per essa metodi GetHashCode e Equals corretti.
  • Trasformare chiavi grandi o complesse in rappresentazioni più compatte, ad esempio, serializzare l'oggetto in una stringa o usare una funzione hash.
  • Utilizzare collezioni o strutture dati specializzate se il dizionario standard non è adatto.

Esempio di chiave composta:

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";