如果null.Equals(null)为什么我会得到NullReferenceException

Ref*_*din 16 c# null nullreferenceexception

我有以下代码行:

var selectedDomainID = lkuDomainType.EditValue.Equals(null) 
    ? string.Empty 
    : lkuDomainType.EditValue;
Run Code Online (Sandbox Code Playgroud)

有时会产生一个NullReferenceException.我不明白的是为什么.是不是要检查我的代码的全部要点,null如果是这样的话string.empty?当我检查DEBUG时,它说明EditValue == null了我错过了什么?

Yur*_*ich 29

使用lkuDomainType.EditValue == null,否则您尝试在null对象上调用实例方法.但更好的选择可能是lkuDomainType.EditValue ?? String.Empty.还要注意为lkuDomainTypenull,除非它是一个类而不是一个对象.

  • +2(遗憾的是不可能)正确的答案和建议使用`??`. (4认同)

Nul*_*ion 15

当您使用Object.PropertyObject未定义时,您将取消引用空指针,这就是您获得异常的原因.相反,使用:

var selectedDomainID = lkuDomainType.EditValue == null ? string.Empty : lkuDomainType.EditValue;
Run Code Online (Sandbox Code Playgroud)

  • 我不得不赞成这个答案a)正确答案,b)在句子中使用*dereference*,b)几乎适当的用户名 (5认同)
  • @Refracted 是的,4 秒 :) 我喜欢他/她使用 `??` 的建议 (2认同)

Jer*_*ing 5

如果EditValue为null则无法调用Equals.在这个cas你必须做:

var selectedDomainID = lkuDomainType.EditValue == null ? string.Empty : lkuDomainType.EditValue;
Run Code Online (Sandbox Code Playgroud)

或者您可以通过以下方式简化它:

var selectedDomainID = lkuDomainType.EditValue ?? string.Empty;
Run Code Online (Sandbox Code Playgroud)