c#为可空布尔值赋值

Dea*_*ean 2 c# nullable

我正在尝试使用?:运算符来为可分配的布尔变量赋值.

这个原始代码工作正常

bool? result;
var condition = 3;

if (condition == 1)
    result = true;
else if (condition == 2)
     result = false;
else result = null;
Run Code Online (Sandbox Code Playgroud)

我更改代码后,它遇到错误,我在搜索互联网后修复它

// 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);
Run Code Online (Sandbox Code Playgroud)

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

从我的理解bool and bool?bool? and null应该仍然被认为是不同的类型,但它适用于这种情况.

任何建议都将不胜感激.谢谢.

小智 6

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

在细分中(condition == 2 ? false : null),两个可能的值是falsenull.编译器看作falsea bool,因此它将null是错误,因为它不是a的有效替代值bool.

通过使用前缀(bool?),您可以清楚地表明您实际上正在分配一个可以为空的布尔值,使编译器感到高兴,因为它知道这两个值确实是相同的类型.