C# 在调试器中监视值时出现空引用异常
我正在重写我的一个类上的equals函数,并得到一个空点异常,尽管在调试器的“watch”部分输入相同的代码时没有异常 这是我的代码(与C# 在调试器中监视值时出现空引用异常,c#,nullreferenceexception,C#,Nullreferenceexception,我正在重写我的一个类上的equals函数,并得到一个空点异常,尽管在调试器的“watch”部分输入相同的代码时没有异常 这是我的代码(与==相比,任何东西都是字符串或基本类型): “监视”窗口中的视图: commandResults的比较是唯一可能导致空异常的事情,从代码中可以看出,这个场景应该由三元运算符处理。不仅如此,在它失败的情况下,它不应该到达该节,因为该行应该在第一个false节上停止执行。这怎么会发生 编辑: 根据要求,这里是异常的详细信息(请注意,这是由ArrayQuals函数调
==
相比,任何东西都是字符串或基本类型):
“监视”窗口中的视图:
commandResults
的比较是唯一可能导致空异常的事情,从代码中可以看出,这个场景应该由三元运算符处理。不仅如此,在它失败的情况下,它不应该到达该节,因为该行应该在第一个false节上停止执行。这怎么会发生
编辑:
根据要求,这里是异常的详细信息(请注意,这是由ArrayQuals函数调用的,异常不在所列代码中使用的异常内)
我认为你所拥有的相当于这个
return this.workOrder == (i.workOrder
&& this.upi == i.upi
&& this.testName == i.testName
&& BasicFunctions.ArraysEqual(this.testTrays, i.testTrays)
&& this.supplyVoltage == i.supplyVoltage
&& this.supplyAmperage == i.supplyAmperage
&& this.commandResults == null) ?
i.commandResults == null :
(this.commandResults.Equals(i.commandResults)
&& this.id == i.id);
你什么时候想要这个
return this.workOrder == i.workOrder
&& this.upi == i.upi
&& this.testName == i.testName
&& BasicFunctions.ArraysEqual(this.testTrays, i.testTrays)
&& this.supplyVoltage == i.supplyVoltage
&& this.supplyAmperage == i.supplyAmperage
&& (this.commandResults == null ?
i.commandResults == null :
this.commandResults.Equals(i.commandResults))
&& this.id == i.id;
基本上,如果前面的任何语句为false,例如
this.supplyanperage==i.supplyanperage
将导致三元运算符执行this.commandResults.Equals(i.commandResults)
即使this.commandResults
为null
您能否创建一个简单的示例来演示错误?也许i.commandResults
为null。将该行拆分为多行以找出导致问题的语句如何?如果不查找,则无法确定,但是三元运算符在优先级上与&&
相比如何?最后一行可以用作三元系第三部分的一部分吗?那你的手表就不一样了。我认为@JamesThorpe是对的。尝试将三元运算符放在括号内。具体地说,我猜?
之前的所有内容都是由三元运算符使用的。您也可以在第一个示例中的:
后面的末尾添加括号。此行为的参考是
return this.workOrder == (i.workOrder
&& this.upi == i.upi
&& this.testName == i.testName
&& BasicFunctions.ArraysEqual(this.testTrays, i.testTrays)
&& this.supplyVoltage == i.supplyVoltage
&& this.supplyAmperage == i.supplyAmperage
&& this.commandResults == null) ?
i.commandResults == null :
(this.commandResults.Equals(i.commandResults)
&& this.id == i.id);
return this.workOrder == i.workOrder
&& this.upi == i.upi
&& this.testName == i.testName
&& BasicFunctions.ArraysEqual(this.testTrays, i.testTrays)
&& this.supplyVoltage == i.supplyVoltage
&& this.supplyAmperage == i.supplyAmperage
&& (this.commandResults == null ?
i.commandResults == null :
this.commandResults.Equals(i.commandResults))
&& this.id == i.id;