字典一起堆栈类类型

时间:2013-11-21 00:55:43

标签: c# dictionary stack unity3d

涉及的敌人课程:

public abstract Enemy : MonoBehaviour {}

public class A : Enemy {}

public class B : Enemy {}

我有一本字典。我想让字典包含每种类型敌人的堆栈。

    public class Test : MonoBehaviour
    {
       // prefabs
       public GameObject a, b;

       public Dictionary<Enemy, Stack> eDictionary; 

       void Start()
       {
          eDictionary = new Dictionary<Enemy, Stack>(); 
          Fill(a, 10);
          Fill(b, 10);
       }
    }

我如何制作堆栈和密钥。

public void Fill(Enemy e, int howMany)
{
   Stack s = new Stack();
   for(int I = 0; I < howMany; I++)
   {
      GameObject g = MonoBehavior.Instantiate(e.gameObject) as GameObject;
      s.Push(g);
   }

  eDictionary.Add(e, s)
}

主要问题是:如何以A型敌人与1把钥匙叠加的方式制作钥匙?

当我进入generalized敌人类A和B并尝试将该敌人添加到相应的堆栈时,由于其键,我得到键不匹配错误。当我将敌人从堆栈中弹出时,我就这样做了,当我完成它们时,我想将它们推入字典的堆栈中(它在那时失败了)。

1 个答案:

答案 0 :(得分:4)

我认为问题可能与你正在使用的密钥有关。

当你将堆栈添加到Dictionary时,你会给它一个敌人实例的密钥。因此,即使您稍后引用具有相同类型的字典,它也将是不同的实例,因此它将不匹配。

一种解决方案是使用类的名称作为键,而不是对象本身。

看到这个答案: https://stackoverflow.com/a/179711/1514883