C# 在调试器中监视值时出现空引用异常

C# 在调试器中监视值时出现空引用异常,c#,nullreferenceexception,C#,Nullreferenceexception,我正在重写我的一个类上的equals函数,并得到一个空点异常,尽管在调试器的“watch”部分输入相同的代码时没有异常 这是我的代码(与==相比,任何东西都是字符串或基本类型): “监视”窗口中的视图: commandResults的比较是唯一可能导致空异常的事情,从代码中可以看出,这个场景应该由三元运算符处理。不仅如此,在它失败的情况下,它不应该到达该节,因为该行应该在第一个false节上停止执行。这怎么会发生 编辑: 根据要求,这里是异常的详细信息(请注意,这是由ArrayQuals函数调

我正在重写我的一个类上的equals函数,并得到一个空点异常,尽管在调试器的“watch”部分输入相同的代码时没有异常

这是我的代码(与
==
相比,任何东西都是字符串或基本类型):

“监视”窗口中的视图:

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;