在if语句中比较空值Nullable<int>不抛异常,该行为是否可靠?
这个行为完全可以信赖!
你观察到的这个现象,是C#语言规范里明确规定的Nullable值类型(比如int?)的比较逻辑,属于语言的核心特性,不是偶然的实现细节,完全可以放心依赖。
咱们拆解一下你的代码场景:
list?.Count返回的是int?类型的null(因为原list是null,空传播运算符返回null)。- 当你把
Nullable<T>类型的值和非Nullable的T值做比较时(比如count > 0),C#的规则是:- 如果Nullable值是
null,那么所有的关系比较(><>=<=)都会直接返回false。 - 只有当Nullable值存在实际值(
HasValue为true)时,才会用它的Value属性和右边的数值做真实比较。
- 如果Nullable值是
- 而
count == null这种相等性比较是特殊处理的,会直接检查Nullable值是否为null,所以会返回true,执行对应的输出。
换句话说,count > 0等价于count.HasValue && count.Value > 0——语言帮你做了null的前置判断,省去了手动写冗余代码的麻烦。
这个规则从C# 2.0引入Nullable值类型开始就一直保持一致,不管你用哪个版本的C#编译器,这个行为都不会变。
内容的提问来源于stack exchange,提问作者rethabile
相关产品推荐
相关产品推荐

