我有以下代码行:
var selectedDomainID = lkuDomainType.EditValue.Equals(null)
? string.Empty
: lkuDomainType.EditValue;
有时会生成NullReferenceException
。我不明白的是为什么。我的代码不是检查null
的全部内容,如果是,请指定string.empty
?当我签入DEBUG时,它说EditValue == null
所以我错过了什么?
答案 0 :(得分:28)
使用lkuDomainType.EditValue == null
,否则您尝试在空对象上调用实例方法。但更好的选择可能是lkuDomainType.EditValue ?? String.Empty
。另请注意lkuDomainType
为空,除非它是一个类而不是对象。
答案 1 :(得分:15)
当您使用Object.Property
并且Object
未定义时,您将取消引用空指针,这就是您获得异常的原因。相反,使用:
var selectedDomainID = lkuDomainType.EditValue == null ? string.Empty : lkuDomainType.EditValue;
答案 2 :(得分:5)
如果EditValue
为空,则无法调用Equals
。在这种情况下,你必须这样做:
var selectedDomainID = lkuDomainType.EditValue == null ? string.Empty : lkuDomainType.EditValue;
或者您可以通过以下方式简化它:
var selectedDomainID = lkuDomainType.EditValue ?? string.Empty;
答案 3 :(得分:3)
你试图在空对象上调用Equals方法 - 改为这样做:
lkuDomainType.EditValue == null
答案 4 :(得分:3)
问题是您在检查对象是否为null之前使用该对象。您正在调用对象的Equals
方法,如果引用为null,则该方法将失败。
您必须与lkuDomainType.EditValue.Equals(null)
交换lkuDomainType.EditValue == null
。
答案 5 :(得分:2)
EditValue == null。这意味着那里没有任何对象。即使函数是.Equals()。
,也无法调用null对象上的函数在这种情况下,你最好只说“(lkuDomainType.EditValue == null)”。
答案 6 :(得分:2)
您应该在这里使用String.IsNullOrEmpty。像这样:
var selectedDomainID = String.IsNullOrEmpty(lkuDomainType.EditValue) ? string.Empty : lkuDomainType.EditValue;
Equals是一种方法,你试图在抛出异常的null对象上调用一个方法。
答案 7 :(得分:2)
当EditValue为null时,您无法在其上调用Equals方法,因此检查的最佳方法是使用
lkuDomainType.EditValue == null ? string.Empty : lkuDomainType.EditValue;
答案 8 :(得分:0)
如果lkuDomainType.EditValue为null,则“lkuDomainType.EditValue.Equals(someObject)”与编码“null.Equals(someObject)”相同。好吧,显然“null”没有任何成员或方法(如果确实如此,它将不会为null)。这就是你得到NullReferenceException的原因。
其他帖子中的大多数示例都可以使用,包括String.IsNullOrEmpty,这是一个返回布尔值的方法。
答案 9 :(得分:0)
所有当前的答案都未能解决一个关键点:在 Equals
类型(即 Nullable
)与 struct
类型上调用 class
之间的区别。< /p>
在值为 null 的 Equals
类型对象上调用 Nullable
不会发出异常,而对 class
类型对象执行相同操作会。
考虑以下代码:
int? num = null; // int? is Nullable<int>
String s = null; // String is a class
var equalsNullable = num.Equals(null); // works
var equalsClass = s.Equals(null); // throws
原因是在这种情况下调用了 Nullable
的 HasValue
方法,有关详细信息,请参阅 Jon Skeet's answer。
正如其他人所说,在 OP 的情况下,要使用的方法是使用 ==
或 ??
。