У меня есть следующая строка кода:
var selectedDomainID = lkuDomainType.EditValue.Equals(null)
? string.Empty
: lkuDomainType.EditValue;
Иногда это генерирует NullReferenceException
. Я не понимаю почему. Разве t весь смысл моего кода в проверке наличия null
и, если да, присвоить string.empty
? Когда я проверяю DEBUG, он заявляет, что EditValue == null
, так что мне не хватает?
Используйте lkuDomainType.EditValue == null
, иначе вы пытаетесь вызвать метод экземпляра для нулевого объекта. Но лучшим вариантом может быть lkuDomainType.EditValue ?? String.Empty
. Также следите за тем, чтобы lkuDomainType
не был пустым, если это не класс, а не объект.
Когда вы используете Object.Property
и Object
не определен, вы разыменовываете нулевой указатель и поэтому получаете исключение. Вместо этого используйте:
var selectedDomainID = lkuDomainType.EditValue == null ? string.Empty : lkuDomainType.EditValue;
Если EditValue
имеет значение null, вы не можете вызвать Equals
. В этом случае вам нужно будет сделать:
var selectedDomainID = lkuDomainType.EditValue == null ? string.Empty : lkuDomainType.EditValue;
Или вы можете упростить это, выполнив:
var selectedDomainID = lkuDomainType.EditValue ?? string.Empty;
вы пытаетесь вызвать метод Equals для нулевого объекта - вместо этого сделайте это так:
lkuDomainType.EditValue == null
Проблема в том, что вы используете объект перед проверкой, является ли он пустым. Вы вызываете метод Equals
объекта, который завершается ошибкой, если ссылка равна нулю.
Вы должны обменять свой lkuDomainType.EditValue.Equals (null)
на lkuDomainType.EditValue == null
.
EditValue == null. Значит, там нет объекта. Вы не можете вызывать функции для нулевых объектов, даже если это функция .Equals ().
В этом случае лучше просто сказать "(lkuDomainType.EditValue == null)".
Здесь нужно использовать String.IsNullOrEmpty. Например, так:
var selectedDomainID = String.IsNullOrEmpty(lkuDomainType.EditValue) ? string.Empty : lkuDomainType.EditValue;
Equals - это метод, вы пытаетесь вызвать метод на нулевом объекте, который выбрасывает исключение.
Если lkuDomainType.EditValue равно null, то "lkuDomainType.EditValue.Equals(someObject)" - это то же самое, что кодировать "null.Equals(someObject)". Очевидно, что у "null" нет ни членов, ни методов (если бы они были, он не был бы null). Поэтому вы получаете исключение NullReferenceException.
Большинство примеров из других сообщений будут работать, включая String.IsNullOrEmpty, который является методом, возвращающим булево значение.
когда EditValue равно null, вы не можете вызвать метод Equals на нем, поэтому лучший способ проверки - использовать
lkuDomainType.EditValue == null ? string.Empty : lkuDomainType.EditValue;