Dicionário genérico C # TryGetValue não encontra chaves
Eu tenho este exemplo simples:
using System;
using System.Collections.Generic;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Dictionary<MyKey, string> data = new Dictionary<MyKey, string>();
data.Add(new MyKey("1", "A"), "value 1A");
data.Add(new MyKey("2", "A"), "value 2A");
data.Add(new MyKey("1", "Z"), "value 1Z");
data.Add(new MyKey("3", "A"), "value 3A");
string myValue;
if (data.TryGetValue(new MyKey("1", "A"), out myValue))
Console.WriteLine("I have found it: {0}", myValue );
}
}
public struct MyKey
{
private string row;
private string col;
public string Row { get { return row; } set { row = value; } }
public string Column { get { return col; } set { col = value; } }
public MyKey(string r, string c)
{
row = r;
col = c;
}
}
}
Isto está funcionando bem. Mas se eu alterar a estrutura MyKey por uma classe MyKey desta maneira:
public class MyKey
Then methodTryGetValue
não encontra nenhuma chave, apesar da chave estar lá fora.
Tenho certeza de que estou perdendo algo óbvio, mas não sei o qu
Qualquer ideia
Obrigad
** Solução **(consulte a solução aceita para obter uma melhor resolução GetHashCode)
Redefini a classe MyKey assim, e tudo está funcionando bem agora:
public class MyKey
{
private string row;
private string col;
public string Row { get { return row; } set { row = value; } }
public string Column { get { return col; } set { col = value; } }
public MyKey(string r, string c)
{
row = r;
col = c;
}
public override bool Equals(object obj)
{
if (obj == null || !(obj is MyKey)) return false;
return ((MyKey)obj).Row == this.Row && ((MyKey)obj).Column == this.Column;
}
public override int GetHashCode()
{
return (this.Row + this.Column).GetHashCode();
}
}
Obrigado a todas as pessoas que respondera