Не могу найти, почему у меня исключение нулевой ссылки - PullRequest
4 голосов
/ 08 мая 2011

Ниже приведен код и проблемная строка.

Когда я наводю указатель мыши на src.EnergyServiceLevel, это показывает, что оно нулевое.Как это может быть, если я проверяю на нулевое значение в предыдущей строке?

Я предполагаю, что, возможно, существуют потоки, которые создают проблему, поэтому я добавил блокировку, но это не помогло.

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 ]

2 голосов
/ 08 мая 2011

Ваш код показывает lock(_locker) - так что похоже, что вы находитесь в многопоточной среде.Можете ли вы проверить, что ничто другое не имеет значения NULL для вашей переменной?то есть что все остальное тоже правильно вызывает lock(_locker)?

1 голос
/ 08 мая 2011

Возможно ваш NULL на res.EnergyServiceLevel.

0 голосов
/ 08 мая 2011

src.EnergyServiceLevel.ServiceGrade может быть нулевым

Перемещение указателя мыши на каждую ссылку точно покажет вам, что является нулевым.

...