[英]C# Dictionary Key override not finding key
我試圖通過使用對象作為鍵的TryGetValue搜索字典。 我已經重寫了GetHashCode,我認為這是設置字典生成鍵的方式所必需的。 下面的Item類是字典的鍵。
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
public class Item : MonoBehaviour
{
int id;
string name;
string itemType;
public Item(string name, int id, string itemType)
{
this.name = name;
this.id = id;
this.itemType = itemType;
}
public override bool Equals(object obj)
{
if (obj == null)
return false;
Item myItem = (Item)obj;
if (myItem == null)
return false;
return (name == myItem.name) && (itemType == myItem.itemType);
}
public override int GetHashCode()
{
return (this.name + this.itemType).GetHashCode();
}
[...]
}
從另一個類中,我使用“ TryGetValue(Item,GameObject)”來查看字典中是否存在該項目,但是即使字典中有多個具有相同名稱和itemType的Item,也找不到該鍵。
public void UIItemCreate(Item item, GameObject itemGameObject)
{
GameObject go = null;
uiItemDictionary.TryGetValue (item, out go);
if(go == null)
{
uiItemDictionary.Add(item,itemGameObject);
go = NGUITools.AddChild(this.gameObject,itemGameObject);
}
[...]
}
有什么建議么? 還有什么我需要覆蓋的嗎?
謝謝,
克里斯
嘗試這樣覆蓋Equals
:
public override bool Equals(object obj)
{
var myItem = obj as Item;
return !ReferenceEquals(myItem, null) && Equals(myItem);
}
public bool Equals(Item myItem)
{
return string.Equals(name, myItem.name, StringComparison.Ordinal) && string.Equals(itemType, myItem.itemType, StringComparison.Ordinal);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.