簡體   English   中英

ContainsKey()在字典中找不到對象

[英]ContainsKey() dont find an object in Dictionary

我是一個家庭作業,我必須實施一些方法。 我可以執行上載方法,在該方法中,我必須上載元素中的字典。 如果密鑰已經在字典中,那么我必須更新值。 如果鍵不在詞典中,則必須添加該元素。 在Foreach中,我可以這樣做。

在if情況下,該方法永遠不會為true,只有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);


    }

什么是Alc? 如果是類,則應重寫.Equals和.GetHashcode,以使字典正常工作。 如果是結構,則無需擔心。

我很好奇您的第二個版本為何有效,因為Item.Key.Equals(alc)應該顯示相同的行為。

您需要在鍵類中正確覆蓋GetHashCode()

GetHashCode()必須為相等的對象返回相等的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM