我正在尝试使用?:运算符来为可分配的布尔变量赋值.
这个原始代码工作正常
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),两个可能的值是false和null.编译器看作falsea bool,因此它将null是错误,因为它不是a的有效替代值bool.
通过使用前缀(bool?),您可以清楚地表明您实际上正在分配一个可以为空的布尔值,使编译器感到高兴,因为它知道这两个值确实是相同的类型.