c# 为可为空的布尔值赋值

c# assign value for nullable boolean

我正在尝试使用 ?: Operator 将值赋给可为 null 的布尔变量。

这是可以正常工作的原始代码

bool? result;
var condition = 3;

if (condition == 1)
    result = true;
else if (condition == 2)
     result = false;
else result = null;

我改代码后报错,上网查了一下修复

// before (error occur)
result = condition == 1 ? true : (condition == 2 ? false : null);

// after (fixed error)
result = condition == 1 ? true : (condition == 2 ? false : (bool?)null); 
// *or
result = condition == 1 ? true : (condition == 2 ? (bool?)false : null);

我知道两个表达式必须是同一类型,但是为什么只需要转换一个表达式而不是所有表达式?这让我很困惑。

根据我的理解,bool and bool?bool? and null 应该仍被视为不同类型,但它适用于这种情况。

如有任何建议,我们将不胜感激。谢谢。

在三元条件运算符中,编译器要求每个可能的赋值都是同一类型。

(condition == 2 ? false : null) 段中,两个可能的值是 falsenull。编译器将 false 视为 bool,因此它会出错,因为 null 不是 bool 的有效替代值。

通过使用 (bool?) 作为前缀,您清楚地表明您实际上是在分配一个可为 null 的布尔值,让编译器满意,因为它知道这两个值确实是同一类型。