You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中if语句的||比较顺序差异:NULL与其他值检查疑问

C#中两种OR比较写法的差异解析

嘿,这个问题问得挺到位的——很多刚接触C#的开发者都会在逻辑或的短路特性上踩坑!我来给你把这个事儿说透:

首先得明确C#里||(逻辑或运算符)的核心特性:短路求值。简单说就是,如果第一个条件的结果已经是true,那么第二个条件会被直接跳过,根本不会执行。这个特性直接决定了不同写法之间的差异。

两种常见写法的对比

我们拿实际代码例子来说明:

写法1(安全且符合常规逻辑)

if (myObject == null || myObject.Value == 0)
{
    // 执行逻辑
}

这种写法是安全的:先检查对象是否为null,如果为true,直接进入if块,完全不会去执行myObject.Value == 0这部分,自然不会触发NullReferenceException。

写法2(危险,可能抛出异常)

if (myObject.Value == 0 || myObject == null)
{
    // 执行逻辑
}

这种写法就有问题了:如果myObject是null,程序会先尝试执行myObject.Value == 0,这时候直接就会抛出空引用异常——因为短路逻辑还没机会生效(只有第一个条件为false时才会走第二个条件,但第一个条件执行时就已经报错了)。

额外情况:带括号 vs 不带括号

如果是类似下面两种写法:

// 带括号
if ((myObject == null) || (myObject.Value == 0))

// 不带括号
if (myObject == null || myObject.Value == 0)

这两种其实没有任何逻辑差异,因为==的运算符优先级比||高,括号只是用来提升代码可读性,不会改变执行顺序和结果。

补充:非短路或运算符|

如果你不小心用了|(注意是单竖线),那不管第一个条件结果如何,两个条件都会被执行。这时候不管你把null检查放在前面还是后面,只要myObject是null,都会触发空引用异常——不过日常开发里几乎不会用|来做逻辑判断,大家都是用||。

总结一下:

  • 用||时,条件的顺序直接决定了代码的安全性,检查null的条件一定要放在前面;
  • 如果是等价逻辑的写法(比如只是加了括号),逻辑上没有差异,只是可读性不同。

内容的提问来源于stack exchange,提问作者donald.dougherty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:21:46