c#为可空布尔值赋值

时间:2018-06-04 03:13:33

标签: c# nullable

我正在尝试使用?: Operator来为可分配的布尔变量赋值。

这个原始代码工作正常

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应该仍然被认为是不同的类型,但它适用于这种情况。

对此有任何建议将不胜感激。感谢。

1 个答案:

答案 0 :(得分:6)

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

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

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