C# 条件空检查上的NullReferenceException
对于以下代码行:C# 条件空检查上的NullReferenceException,c#,.net,nullreferenceexception,C#,.net,Nullreferenceexception,对于以下代码行: Class1 Obj1 = GetObjByID(ID); if (Obj1!= null) { Obj1.IsAgentReserved = true; // causing exception here Obj2.EstDeviceID = Obj1.Extension; } 我有异常System.NullReferenceException:对象引用未设置为对象的实例。在Obj1.IsAgentReserved=true时;,虽然我在这之前有
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.当前版本的代码与stacktrace匹配这可能发生在多线程应用程序中,其中另一个线程删除了您之间的对象!空检查及其使用。IsAgentReserved是属性吗?如果是,setter的代码是什么样子的?如果抛出异常后Obj1实际上为null?它必须是导致异常的其他对象。GetObjByDid;返回Class1类的对象?这是实际代码吗?你真的有一个叫做Class1的类吗?在这种情况下没有;由于Obj1是一个局部变量,其他线程不可能将其更改为null。它不能将变量值设置为null,但它可以破坏它所指向的对象,这很可能是一个共享对象。我假设这是C,其中只有垃圾收集器销毁对象——当局部变量引用该对象时,它不会这样做是的,Jonas你是对的。当我有它的引用时,不应该破坏它的C和变量。@m abrar为您重新标记,记住提供好的标记,因为它增加了常驻C专家看到您的问题的可能性:-