我正在尝试使用?: 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
应该仍然被认为是不同的类型,但它适用于这种情况。
对此有任何建议将不胜感激。感谢。
答案 0 :(得分:6)
在三元条件运算符中,编译器要求每个可能的赋值都属于同一类型。
在细分(condition == 2 ? false : null)
中,两个可能的值为false
和null
。编译器将false
视为bool
,因此null
不是bool
的有效替代值,因此会出错。
通过使用(bool?)
作为前缀,您可以清楚地表明您实际上正在分配一个可以为空的布尔值,使编译器感到高兴,因为它知道两个值确实是相同的类型。