【问题标题】:NullReferenceException on a conditional null check?NullReferenceException 条件空检查?
【发布时间】:2011-07-01 18:52:25
【问题描述】:

我正在尝试修复一个我无法重现的错误(yipeee!)。我有最初发现问题的用户复制的堆栈跟踪,它显示代码在检查对象是否为空的行上抛出空引用异常(未处理)......就像这样:

private void someFunction()
{
    radioButton1.CheckedChanged -= checkedChangedEventHandler
    radioButton2.CheckedChanged -= checkedChangedEventHandler

    if (someObject != null)  // throws NullReferenceException...allegedly
    {
         if (someObject.Property == something)
         {
            // set properties on some UI components
         }
    }
}

什么样的条件会导致这种情况?

更新

添加了更多代码。 SomeFunction 方法被 checkedChanged 事件处理程序调用。

更新 2

堆栈跟踪一定是错误的,正如你们中的一些人所建议的那样。没有运算符重载,该方法仅引用四个不是 UI 组件(标签和单选按钮)的对象,所有这些对象在初始化时仅分配一次,并且在访问此代码之前被多次引用,因此任何在此之前会捕获空引用。我将不得不更仔细地查看调用事件处理函数。

这是一个解释错误行号的堆栈跟踪的线程:

Wrong line number on stack trace

【问题讨论】:

  • 在您的错误跟踪器中标记它 norepro 并继续前进! =)
  • 你能告诉我们堆栈跟踪吗?
  • 是否有更多我们可以看到的代码?
  • 您对当前版本的代码与堆栈跟踪匹配的信心如何?
  • 有时可能会在实际抛出异常的行之后出现异常。你检查过上面的那行吗?

标签: c# .net nullreferenceexception


【解决方案1】:

【讨论】:

  • ...做得很糟糕!
  • 不...它不会重载 != 运算符。该对象实现了几个接口,没有一个会重载任何东西。
【解决方案2】:

最有可能的两个候选人是:

  1. 重载的 != 运算符正在造成破坏(尽管您认为堆栈跟踪表明了这一点。)
  2. 堆栈跟踪错误,您需要更多信息才能继续。

我认为 2 的可能性更大。

【讨论】:

  • 看来一定是#2。如果我真的找到原因,我会发布更新。
【解决方案3】:

我只是想在这里为任何偶然发现此线程的人发布此消息。 dlev 得到了建议的正确答案,但我认为它仍然可以作为答案发布:

Wrong line number on stack trace

stack trace line numbers are wrong with debug=false and compilerOptions="/debug:pdbonly"

【讨论】:

    猜你喜欢
    • 2011-10-27
    • 2014-06-15
    • 1970-01-01
    • 2021-04-11
    • 2016-10-25
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多