【问题标题】:Dictionary to Stack Class Types Together将类类型堆叠在一起的字典
【发布时间】:2013-12-05 07:08:45
【问题描述】:

涉及的敌人类别:

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 并尝试将该敌人添加到相应的堆栈中时,由于其键,我得到键不匹配错误。当我将敌人从堆栈中弹出时,我会这样做,然后当我完成它们时,我想将它们推入字典的堆栈中(此时它会失败)。

【问题讨论】:

  • 为什么不使用Stack&lt;Enemy&gt;
  • 我会有不同的敌人。所以我想为每一种敌人准备一个堆栈。除非您的意思是为字典中的 Stack 提供一个类型,否则在这种情况下不需要它。
  • @MikeJohn 似乎您将Enemy 类型与Enemyinstances 类型混淆了。尝试使用字符串或枚举(例如enum EnemyType)代替键。或者也许可以使用typeof(Enenemy) 作为键。

标签: c# dictionary stack unity3d


【解决方案1】:

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

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

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

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

【讨论】:

  • 这并不能真正回答我的问题,但既然我知道了问题,我会接受它并以不同的方式提出我的问题。
猜你喜欢
  • 2013-12-09
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 2011-09-24
  • 1970-01-01
  • 2013-12-07
相关资源
最近更新 更多