Sobes.tech
Junior — Middle

Que métodos podem ser usados para evitar limitações de tamanho ou restrições ao usar uma chave em um dicionário?

sobes.tech IA

Resposta da IA

Em C#, os dicionários (Dictionary<TKey, TValue>) têm restrições nos tipos de chaves e no seu tamanho, por exemplo, a chave deve ser hashável e ter métodos GetHashCode e Equals corretamente implementados.

Para evitar restrições de tamanho ou tipo de chave, pode-se:

  • Utilizar chaves compostas, por exemplo, criar uma classe ou estrutura que combine vários valores e implementar para ela métodos GetHashCode e Equals corretos.
  • Converter chaves grandes ou complexas em representações mais compactas, por exemplo, serializar o objeto em uma string ou usar uma função hash.
  • Utilizar coleções ou estruturas de dados especializadas se o dicionário padrão não for adequado.

Exemplo de chave 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";