簡體   English   中英

C#字典鍵覆蓋未找到鍵

[英]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.

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