我正在使用C#(使用XNA)开发一个小型RTS。
我将每个单位“转到”位置设置为他们应该去的向量。如果我不比较两个Hashtables,一切正常,但是当我这样做时,我得到这个“NullReferenceException未处理”的恼人错误。
以下是我收到错误的代码:
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"])
)
希望这足够具体。
答案 0 :(得分:0)
可悲的是,这里没有足够的信息。您在代码行中使用的某个引用类型在执行时为null。您可以做的是在该行上设置断点,并在调试模式下执行。当执行流程到达该行时,您可以检查您正在使用的所有引用,以查看哪一个为null,然后从那里诊断它为空的原因。
答案 1 :(得分:0)
您提供的散列表值比较没有问题。铸造和一些一般设计点存在一些问题。我相信在尝试将null转换为float
/ int
时会遇到此类异常,以避免此类问题使用Hashtable.ContainsKey()方法检查给定密钥是否存在于哈希表中,然后才能访问它值。不要忘记在强制转换之前检查null值。此外,您可以考虑使用泛型类型IDictionary<string, float>
(see MSDN),因此所有值都将被输入,您不需要显式转换,这也会带来一些性能提升,因为不再需要像您的示例float -> object
在存储值时使用object -> float
(取消装箱)在检索和转换时。