在C#中,可以在不使用运算符的情况下评估变量是否为null?

Bas*_*mme 1 c# null if-statement

例如,可以写这个

if(变量!= null)

不使用运算符!=或==?

Mar*_*ell 9

好吧,我只是使用==(如果你试图避免一个自定义的相等运算符,也许转换为object- 它将是一个nop强制转换)

除了,我的钱会随之而来object.ReferenceEquals(obj, null),但你也可以使用,object.Equals(obj, null)因为它处理null等.

为了完整性:为什么我只使用==/ !=?简单:编译器可以直接执行此操作.用于对对象进行空检查的IL实际上是:

  • 加载ref
  • 如果为true则为branch(如果为false则为branch)

而已.两条IL指令.它甚至不执行"加载null,等式检查" - 因为"true"的定义是"任何不是0/null",而"false"是"0/null".

对于类似的东西ReferenceEquals,那就是:

  • 加载ref
  • 加载null
  • 调用方法
  • (创建一个堆栈框架)
  • 加载第一个arg
  • 加载第二个arg
  • 做一次平等检查
  • (然后将值传递回堆栈帧,返回true/false)
  • 如果为true则为branch(如果为false则为branch)

我知道我更喜欢......


R. *_*des 5

你可以用.object.ReferenceEquals(variable, null)

  • ...或者通过创建一个扩展方法并将其称为`obj.IsNotNull()` (2认同)