例如是否可以这样写
如果(变量!= null)
不使用运算符 != 或 == ?
最佳答案
好吧,我只使用 ==
(如果你试图避免自定义相等运算符,也许转换为 object
- 无论如何它都会是一个 nop 转换)
除此之外,我的钱会花在 object.ReferenceEquals(obj, null)
上,但您也可以使用 object.Equals(obj, null)
,因为它处理 null
等
为了完整性:为什么我只使用 ==
/!=
?很简单:编译器可以直接 执行此操作。对对象进行空检查的 IL 实际上是:
- 加载引用
- 如果为真则分支(或如果为假则分支)
就是这样。两条 IL 指令。它甚至不执行“加载 null,相等性检查”——因为“true”的定义是“任何非 0/null 的东西”,而“false”是“0/null”。
对于像ReferenceEquals
这样的东西,就是:
- 加载引用
- 加载null
- 调用方法
- (创建堆栈框架)
- 加载第一个参数
- 加载第二个参数
- 做平等检查
- (然后将值传递回返回 true/false 的堆栈帧)
- 如果为真则分支(或如果为假则分支)
我知道我更喜欢哪个......
关于c# - 在 C# 中,是否可以在不使用运算符的情况下评估变量是否不同于 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2426674/