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)
段中,两个可能的值是 false
和 null
。编译器将 false
视为 bool
,因此它会出错,因为 null
不是 bool
的有效替代值。
通过使用 (bool?)
作为前缀,您清楚地表明您实际上是在分配一个可为 null 的布尔值,让编译器满意,因为它知道这两个值确实是同一类型。
我正在尝试使用 ?: 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)
段中,两个可能的值是 false
和 null
。编译器将 false
视为 bool
,因此它会出错,因为 null
不是 bool
的有效替代值。
通过使用 (bool?)
作为前缀,您清楚地表明您实际上是在分配一个可为 null 的布尔值,让编译器满意,因为它知道这两个值确实是同一类型。