找不到为什么我有一个空引用异常

时间:2011-05-08 15:11:52

标签: c# .net exception nullreferenceexception

以下是代码和有问题的一行。

当我将鼠标悬停在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 = ...行。

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

Screenshot of exception while debugging

3 个答案:

答案 0 :(得分:2)

您的代码显示lock(_locker) - 所以看起来您处于多线程环境中。你可以检查没有其他东西是你的变量吗?即其他一切也正确地调用lock(_locker)

答案 1 :(得分:1)

也许您的NULL位于res.EnergyServiceLevel

答案 2 :(得分:0)

src.EnergyServiceLevel.ServiceGrade可能为null

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