条件null检查出现NullReferenceException

本文关键字:NullReferenceException 检查 null 条件 | 更新日期: 2023-09-27 18:01:08

我正试图修复一个无法重现的错误(yipeee!(。我有最初发现问题的用户复制的堆栈跟踪,它显示代码在检查对象是否为null的行上抛出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
         }
    }
}

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

更新

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

更新2

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

这里有一个线程解释了带有错误行号的堆栈跟踪:

堆栈跟踪上的行号错误

条件null检查出现NullReferenceException

someObject是否重载了!=运算符?

http://msdn.microsoft.com/en-us/library/8edha89s(v=vs.71(.aspx

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

  1. 过载!=操作符正在造成严重破坏(尽管您可能认为堆栈跟踪显示了这一点。(
  2. 堆栈跟踪是错误的,您需要更多信息才能继续

我认为2更有可能。

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

堆栈跟踪上的行号错误

堆栈跟踪行号是错误的,debug=false和compilerOptions="调试:pdbonly";