【问题标题】:c# assign value for nullable booleanc# 为可为空的布尔值赋值
【发布时间】:2018-06-04 03:13:33
【问题描述】:

我正在尝试使用?: 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 仍应被视为不同类型,但在这种情况下有效。

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

【问题讨论】:

标签: c# nullable


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-18
    • 2019-03-28
    • 2023-03-17
    • 2013-05-09
    • 2012-02-20
    • 2012-12-06
    • 1970-01-01
    • 2016-04-26
    相关资源
    最近更新 更多