【问题标题】:NullReferenceException on a conditional null checkNullReferenceException 条件空检查
【发布时间】:2011-10-27 05:03:53
【问题描述】:

对于以下代码行:

Class1 Obj1 = GetObjByID(ID); 
if (Obj1!= null) 
{ 
     Obj1.IsAgentReserved = true; // causing exception here
     Obj2.EstDeviceID = Obj1.Extension; 
}

我有异常“System.NullReferenceException:对象引用未设置为对象的实例。”在 Obj1.IsAgentReserved = true;,虽然我在此之前进行了空检查。

可能的原因是什么?这种情况偶尔会发生,我无法重现。

我检查了以下内容:
1. != 运算符没有重载
2. Stacktrace 对我来说似乎是正确的
3. 当前版本的代码匹配堆栈跟踪

【问题讨论】:

  • IsAgentReserved 是属性吗?如果是,setter 的代码是什么样的?
  • 如果Obj1在抛出异常后实际上为null?一定是其他对象导致了异常。
  • GetObjByID(ID); 是否返回类 Class1 的对象?
  • 这是实际代码吗?你真的有一个叫“Class1”的类吗?

标签: c# .net nullreferenceexception


【解决方案1】:

这可能发生在多线程应用程序中,其中另一个线程在您的 !null 检查和使用之间删除了对象。

【讨论】:

  • 在这种情况下不是;由于 Obj1 是一个局部变量,其他线程不可能将其更改为 null。
  • 它不能将变量值设置为 null 但它可以破坏它指向的对象(这很可能是一个共享的东西)。从而使引用无效。
  • 我假设这是 C#,只有垃圾收集器会销毁对象 - 当局部变量引用该对象时它不会这样做
  • 是的,乔纳斯,你是对的。当我有它的引用时,它的 C# 和变量不应该被破坏。
  • @m abrar 为你重新标记,记得提供好的标签,因为它增加了常驻 C# 专家看到你的问题的可能性:-)
猜你喜欢
  • 1970-01-01
  • 2014-06-15
  • 1970-01-01
  • 2021-04-11
  • 2016-10-25
  • 1970-01-01
  • 2011-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多