C# Linq中Sum方法能否返回null?为何定义为double?
Linq Sum<double?> 相关疑问解答
1. Sum<double?> 能否返回null?
不能。无论你传入的序列是空、全为null,还是混合null与非null值,Sum<double?>的返回结果永远是一个有值的double?(即HasValue为true),不会返回null。
比如这些测试场景的结果都是0(而非null):
new List<double?>(){null,null}.Sum()new List<double?>(){0,null}.Sum()new List<double?>().Sum()(空序列)
2. 为什么它的返回类型定义为double?而非double?
这是.NET框架设计时的签名一致性考量:
- 对于nullable数值类型的其他聚合函数(比如
Average<double?>、Min<double?>、Max<double?>),确实存在返回null的场景(比如序列为空或所有元素都是null时,Average会返回null)。 - 为了让同类型的聚合方法签名保持统一,
Sum<double?>也沿用了double?作为返回类型,尽管它的实际实现中永远不会返回null(内部会把null元素视为0进行累加,空序列的累加结果也是0)。
内容的提问来源于stack exchange,提问作者Jeffrey Chen
相关产品推荐
相关产品推荐

