如何比较两个哈希表

本文关键字:哈希表 两个 比较 何比较 | 更新日期: 2023-09-27 18:18:25

我正在用c# (XNA)开发一个小型RTS。

我将每个单位的"goto"位置设置为它们应该去的向量。如果我不比较两个哈希表,一切都可以正常工作,但是当我这样做时,我得到这个"NullReferenceException was unhandled"令人讨厌的错误。

这是我得到错误的代码:

if (
    ((float)unit[(int)selectedunits[I+"ID"] + "posX"] != 
     (float)cgoto[(int)selectedunits[I+"ID"] + "X"])
    &&
    ((float)unit[(int)selectedunits[I+"ID"] + "posY"] !=
     (float)cgoto[(int)selectedunits[I+"ID"] + "Y"])
   )

希望这足够具体

如何比较两个哈希表

遗憾的是,这里没有足够的信息。在代码行中使用的引用类型之一在执行时为空。您所能做的就是在该行上设置一个断点,并在调试模式下执行。当执行流到达该行时,您可以检查正在使用的所有引用,以查看哪个引用为空,然后从那里诊断它为空的原因。

  1. http://msdn.microsoft.com/en-us/library/system.nullreferenceexception.aspx
  2. http://msdn.microsoft.com/en-us/library/490f96s2.aspx
  3. http://msdn.microsoft.com/en-us/library/9kkx3h3c.aspx

您提供的哈希表值比较没有问题。有一些铸造问题和一些一般的设计要点。我相信当你试图将null转换为float/int时,你会得到这样的异常,为了避免这样的问题,使用hashtable . containskey()方法来检查给定的键是否存在于哈希表中,然后才访问它的值。不要忘记在强制转换之前检查值是否为空。此外,您可以考虑使用通用类型的IDictionary<string, float>(见MSDN),因此所有值都将被键入,您不需要显式强制转换,这也会带来一些性能收益,因为不再像您的示例float -> object那样存储值和object -> float(拆箱)时检索和强制转换。