当value为object类型且仅取值null、true、false时,两种表达式的行为与执行差异?
表达式行为与执行过程对比分析
已知value的类型为object,取值仅可能为null、true(bool类型实例)或false(bool类型实例),以下是两个表达式的对比:
// 表达式1 value == null ? false : (bool) value // 表达式2 (bool?) value == true
(a) 行为表现差异
两种表达式在所有合法输入下的最终返回结果完全一致:
- 当
value = null时:两者均返回false - 当
value = true时:两者均返回true - 当
value = false时:两者均返回false
简言之,从外部行为来看,两个表达式是等价的,没有表现差异。
(b) 执行过程差异
两者的内部执行逻辑存在明显不同:
表达式1的执行流程
- 先执行
value == null判断:直接检查引用是否为null,得到布尔结果 - 若判断结果为
true,直接返回false - 若判断结果为
false,执行(bool)value强制类型转换:因为此时value必然是bool类型实例,转换直接提取其布尔值并返回
表达式2的执行流程
- 先执行
(bool?)value可空类型转换:- 若
value是null,转换为bool?类型的null实例 - 若
value是bool类型的true/false,转换为包含对应布尔值的bool?实例
- 若
- 将转换后的
bool?实例与true进行相等比较:- 若
bool?为null,比较结果为false - 若
bool?包含true,比较结果为true - 若
bool?包含false,比较结果为false
- 若
- 返回上述比较的布尔结果
内容的提问来源于stack exchange,提问作者Josh Gallagher
相关产品推荐
相关产品推荐

