Dictionary.ContainsKey возвращает False, но хочет True - PullRequest
16 голосов
/ 10 июня 2010
namespace Dic
{
public class Key
{
    string name;
    public Key(string n) { name = n; }
}

class Program
{
    static string Test()
    {
        Key a = new Key("A");
        Key b = new Key("A");
        System.Collections.Generic.Dictionary<Key, int> d = new System.Collections.Generic.Dictionary<Key, int>();
        d.Add(a, 1);
        return d.ContainsKey(b).ToString();
    }

    static void Main(string[] args)
    {
        System.Console.WriteLine(Test());
    }
}
}

Что я должен изменить, чтобы стать правдой?

Ответы [ 12 ]

0 голосов
/ 10 июня 2010

ContainsKey в этом случае сравнивает Key как объекты и проверяет, совпадают ли сами объекты - нет.Вам нужно реализовать IComparable или переопределить Key.Equals или что-то в этом роде, чтобы заставить его делать то, что вы хотите.

0 голосов
/ 10 июня 2010

они имеют одни и те же значения внутри, но a! = B, поскольку они являются 2 разными переменными.

...