条件空检查的NullReferenceException?

时间:2011-07-01 18:52:25

标签: c# .net nullreferenceexception

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

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
         }
    }
}

这会导致什么样的条件?

更新

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

更新2

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

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

Wrong line number on stack trace

3 个答案:

答案 0 :(得分:8)

答案 1 :(得分:4)

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

  1. 一个重载的!=运算符导致破坏(虽然您认为堆栈跟踪显示了这一点。)
  2. 堆栈跟踪错误,您需要更多信息才能继续。
  3. 我认为2更有可能。

答案 2 :(得分:0)

我只是想在这里发布这个帖子,适合任何偶然发现这个帖子的人。 dlev得到了建议的正确答案,但我认为发布答案仍然是相关的:

Wrong line number on stack trace

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