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

标签 c# null if-statement

例如是否可以这样写

如果(变量!= 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/

相关文章:

c# - 在 C# 项目中部署 CasperJS

c# - WPF自定义DatagridColumn绑定(bind)问题

c# - Xceed DataGrid ExcelExporter 需要 Excel 吗?

MySQL 5.5 基于IF语句的查询

c - 为什么这个段错误(核心转储)??? int main (int argc, char *argv[])

c# - SQL Server 和 C# 之间的性能问题

Objective-C:你能测试静态类类型的未初始化指针吗?

c - 字符串末尾的空字符 '\0'

python - 这种三元条件有更好的解决方案吗?

ios - 如何将 subview 添加到 TableView 单元格中的stackview?