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

在if语句中比较空值Nullable<int>不抛异常,该行为是否可靠?

这个行为完全可以信赖!

你观察到的这个现象,是C#语言规范里明确规定的Nullable值类型(比如int?)的比较逻辑,属于语言的核心特性,不是偶然的实现细节,完全可以放心依赖。

咱们拆解一下你的代码场景:

  1. list?.Count返回的是int?类型的null(因为原list是null,空传播运算符返回null)。
  2. 当你把Nullable<T>类型的值和非Nullable的T值做比较时(比如count > 0),C#的规则是:
    • 如果Nullable值是null,那么所有的关系比较(>< >= <=)都会直接返回false。
    • 只有当Nullable值存在实际值(HasValue为true)时,才会用它的Value属性和右边的数值做真实比较。
  3. 而count == null这种相等性比较是特殊处理的,会直接检查Nullable值是否为null,所以会返回true,执行对应的输出。

换句话说,count > 0等价于count.HasValue && count.Value > 0——语言帮你做了null的前置判断,省去了手动写冗余代码的麻烦。

这个规则从C# 2.0引入Nullable值类型开始就一直保持一致,不管你用哪个版本的C#编译器,这个行为都不会变。

内容的提问来源于stack exchange,提问作者rethabile

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:29:55