![](/img/trans.png)
[英]Dictionary throwing StackOverflowException after ContainsKey for an object is called
[英]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.