ContainsKey()在Dictionary中找不到对象

时间:2011-12-01 11:54:52

标签: c# dictionary

我是一个家庭作业,我不得不实施一些方法。我可以做上传方法,我必须在元素中上传字典。如果Key已经在Dictionary中,我必须更新Value。如果密钥不在字典中,我必须添加该元素。在Foreach中,我可以做到这一点。

在if的情况下,方法永远不会出现,只有else的情况才会执行。 (换句话说,我试图if(alcDictionary.Keys==alc) - 但是没有用)。我不知道为什么。有人可以解释一下我的问题在哪里?为什么永远不执行If案例。 (总是写出“不要找”,而不是“找到”)

我用containsKey()编写了这个方法:

     public void Upload(Alcohol alc, int dl)
    {
        int d = 0;
        Alcohol s = null;
        if (alcDictionary.ContainsKey(alc))
        {

            Console.WriteLine("I find");
            d = alcDictionary[alc];
            alcDictionary[alc] = d + dl;
        }
        else
        {
            Console.WriteLine("dont find");
            alcDictionary.Add(alc, dl);
        }

使用Foreach(效果很好!)

            int d = 0;
        Alcohol s = null;
        foreach (var item in alcDictionary)
        {
            if (item.Key.Equals(alc))
            {
                d = item.Value;
                s = item.Key;
            }
        }
        if (s != null)
        {
            alcDictionary[s] = d + dl;
        }
        else
        {
            alcDictionary.Add(alc, dl);
        }

其他一些代码:

    public Kocsma()
    {
        Upload(new Alcohol("Borsodi alc", 160, 4.6), 1000);
        Upload(new Alcohol("Pilsner Urquell", 250, 4.4), 800);
        Upload(new Alcohol("Soproni Ászok", 150, 4.5), 900);
        Upload(new Alcohol("Dreher Classic", 200, 5.2), 600);
    }


    static void Main(String[] args)
    {
        Alcohol b = new Alcohol("Borsodi alc", 160, 4.6); //34
        Alcohol c = new Alcohol("Bratista alc", 230, 4.5); // 51
        Alcohol d = new Alcohol("Soproni Ászok", 150, 4.5); // 33,3

        Kocsma pub = new Kocsma();

        pub.Upload(c, 300);
        pub.Upload(d, 450);
        pub.Upload(b, 100);


    }

2 个答案:

答案 0 :(得分:0)

您需要在密钥类中正确覆盖GetHashCode()

GetHashCode()必须为相等的对象返回相等的值。

答案 1 :(得分:0)

什么是alc?如果它是一个类,你应该覆盖.Equals和.GetHashcode以使字典正常工作。如果它是一个结构,你不需要担心它。

我很好奇为什么你的第二个版本有效,因为Item.Key.Equals(alc)应该表现出同样的行为。