Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';我找不到为什么我有空引用异常_C#_.net_Exception_Nullreferenceexception - Fatal编程技术网

C# Can';我找不到为什么我有空引用异常

C# Can';我找不到为什么我有空引用异常,c#,.net,exception,nullreferenceexception,C#,.net,Exception,Nullreferenceexception,下面是代码和有问题的行 当我将鼠标悬停在src.EnergyServiceLevel上时,它显示为空。 如果我在前一行中检查null,那怎么可能呢 我的猜测是可能有线程导致了问题,所以我添加了一个锁, 但这没用 public static ServiceLevelsGroup SafeClone(this ServiceLevelsGroup src) { ServiceLevelsGroup res = null; lock (_locker) { if (src != nul

下面是代码和有问题的行

当我将鼠标悬停在
src.EnergyServiceLevel
上时,它显示为空。 如果我在前一行中检查null,那怎么可能呢

我的猜测是可能有线程导致了问题,所以我添加了一个锁, 但这没用

public static ServiceLevelsGroup SafeClone(this ServiceLevelsGroup src) {
  ServiceLevelsGroup res = null;
  lock (_locker) {
    if (src != null) {
      res = new ServiceLevelsGroup();
      if (src.EnergyServiceLevel != null) {
        res.EnergyServiceLevel = new ServiceLevelInfo { ServiceGrade = src.EnergyServiceLevel.ServiceGrade };

        if (src.EnergyServiceLevel.Reason != null)
          res.EnergyServiceLevel.Reason = src.EnergyServiceLevel.Reason;
      }
    }
  }

  return res;
}
异常发生在上述代码中的
res.EnergyServiceLevel=…

以下是调试模式下发生的异常的屏幕截图:


可能您的NULL位于
res.EnergyServiceLevel
您的代码显示了
锁(\u locker)
——因此看起来您处于多线程环境中。你能检查一下你的变量是否为空吗?i、 e.其他所有调用的
锁(\u locker)
是否正确?

src.EnergyServiceLevel.ServiceGrade
可能为空


将鼠标指针移动到每个引用将准确显示哪个为空。

能否将代码复制到帖子中,而不是发布图像?文本太小,无法阅读。请同时发布异常详细信息。由于这是一个扩展方法,我猜想,
ServiceLevelsGroup
/
ServiceLevelInfo
不在您的控件中的类可能重复?在这种情况下,异常可能来自
ServiceLevelInfo
构造函数中-如果打开“查看详细信息…”链接,并深入到相应的
InnerException
s中,会发生什么情况?@hammar:您可以直接查看图像以获得全尺寸视图。+1锁定仅在您也锁定setter时才有用。虽然,由于OP正在定义一个扩展方法,他/她可能无法访问原始代码。我认为您最接近真实情况,一旦我再次访问worl,我将检查可能我没有正确锁定代码的其他部分。谢谢-如果这不是锁定问题,请使用“查看详细信息”并查看异常的调用堆栈-它可能位于属性求值的某个位置。这不会导致NullReferenceException这不会导致NullReferenceException分配
null
值是完全合法的