Если null.Equals (null), почему я получаю исключение NullReferenceException

У меня есть следующая строка кода:

var selectedDomainID = lkuDomainType.EditValue.Equals(null) 
    ? string.Empty 
    : lkuDomainType.EditValue;

Иногда это генерирует NullReferenceException . Я не понимаю почему. Разве t весь смысл моего кода в проверке наличия null и, если да, присвоить string.empty ? Когда я проверяю DEBUG, он заявляет, что EditValue == null , так что мне не хватает?

16
задан gunr2171 1 November 2016 в 16:27
поделиться

9 ответов

Используйте lkuDomainType.EditValue == null , иначе вы пытаетесь вызвать метод экземпляра для нулевого объекта. Но лучшим вариантом может быть lkuDomainType.EditValue ?? String.Empty . Также следите за тем, чтобы lkuDomainType не был пустым, если это не класс, а не объект.

29
ответ дан 30 November 2019 в 15:18
поделиться

Когда вы используете Object.Property и Object не определен, вы разыменовываете нулевой указатель и поэтому получаете исключение. Вместо этого используйте:

var selectedDomainID = lkuDomainType.EditValue == null ? string.Empty : lkuDomainType.EditValue;
15
ответ дан 30 November 2019 в 15:18
поделиться

Если EditValue имеет значение null, вы не можете вызвать Equals . В этом случае вам нужно будет сделать:

var selectedDomainID = lkuDomainType.EditValue == null ? string.Empty : lkuDomainType.EditValue;

Или вы можете упростить это, выполнив:

var selectedDomainID = lkuDomainType.EditValue ?? string.Empty;
5
ответ дан 30 November 2019 в 15:18
поделиться

вы пытаетесь вызвать метод Equals для нулевого объекта - вместо этого сделайте это так:

lkuDomainType.EditValue == null
3
ответ дан 30 November 2019 в 15:18
поделиться

Проблема в том, что вы используете объект перед проверкой, является ли он пустым. Вы вызываете метод Equals объекта, который завершается ошибкой, если ссылка равна нулю.

Вы должны обменять свой lkuDomainType.EditValue.Equals (null) на lkuDomainType.EditValue == null .

3
ответ дан 30 November 2019 в 15:18
поделиться

EditValue == null. Значит, там нет объекта. Вы не можете вызывать функции для нулевых объектов, даже если это функция .Equals ().

В этом случае лучше просто сказать "(lkuDomainType.EditValue == null)".

2
ответ дан 30 November 2019 в 15:18
поделиться

Здесь нужно использовать String.IsNullOrEmpty. Например, так:

var selectedDomainID = String.IsNullOrEmpty(lkuDomainType.EditValue) ? string.Empty : lkuDomainType.EditValue;

Equals - это метод, вы пытаетесь вызвать метод на нулевом объекте, который выбрасывает исключение.

2
ответ дан 30 November 2019 в 15:18
поделиться

Если lkuDomainType.EditValue равно null, то "lkuDomainType.EditValue.Equals(someObject)" - это то же самое, что кодировать "null.Equals(someObject)". Очевидно, что у "null" нет ни членов, ни методов (если бы они были, он не был бы null). Поэтому вы получаете исключение NullReferenceException.

Большинство примеров из других сообщений будут работать, включая String.IsNullOrEmpty, который является методом, возвращающим булево значение.

0
ответ дан 30 November 2019 в 15:18
поделиться

когда EditValue равно null, вы не можете вызвать метод Equals на нем, поэтому лучший способ проверки - использовать

lkuDomainType.EditValue == null ? string.Empty : lkuDomainType.EditValue;
2
ответ дан 30 November 2019 в 15:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: