C#:'<null>'和'bool'之间的隐式转换</null>

时间:2012-10-07 12:10:52

标签: c#

当我尝试将object转换为bool时,我收到了一条奇怪的错误消息,这是我的代码:

public partial class ModifierAuteur : DevExpress.XtraEditors.XtraForm
{
    public ModifierAuteur(object getKeyDecesCheckBox)
    {
         decesCheckBox.Checked = getKeyDecesCheckBox == null ? null : (bool)getKeyDecesCheckBox;
    }
}

这是错误消息:

  

由于存在,因此无法确定条件表达式的类型   <null>bool

之间没有隐式转换

4 个答案:

答案 0 :(得分:20)

假设可以进行分配,您需要转换为可以为空的bool,如下所示:

decesCheckBox.Checked = getKeyDecesCheckBox == null ? null : (bool?)((bool)getKeyDecesCheckBox);

bool的内部强制转换将值展开,而bool?的外部强制转换使其与条件表达式的null兼容。

如果作业的左侧不允许null,则需要确定getKeyDecesCheckBoxnull时要设置的值。通常,这是一个false

 decesCheckBox.Checked = getKeyDecesCheckBox == null ? false : (bool)getKeyDecesCheckBox;

答案 1 :(得分:3)

假设Checked属性的类型为nullable bool,我可能会执行以下操作:

decesCheckBox.Checked = (getKeyDecesCheckBox == null ? (bool?)null : (bool?)getKeyDecesCheckBox);

如果它需要bool(不可为空),您可以使用以下命令轻松地将null转换为false:

decesCheckBox.Checked = (getKeyDecesCheckBox == null ? (bool?)null : (bool?)getKeyDecesCheckBox).GetValueOrDefault();

答案 2 :(得分:0)

decesCheckBox.Checked的类型为bool。因此,您必须提供falsetrue

答案 3 :(得分:0)

你的'? :'运算符有两种可能的不兼容返回类型:如果对象为null,则返回值null,可以将其强制转换为任何可以为null的类型。如果对象不为null,则其返回类型为bool。

我不知道'Checked'是什么类型,但我怀疑它的类型是'bool'。

这里的问题是你不能将null转换为'bool'类型,因此在对象为null的情况下你必须决定你希望它是什么类型。如果您希望它是假的,您可以将语句写成:

decesCheckBox.Checked = (getKeyDecesCheckBox as bool) ?? false;

??运算符在对象为空或无法转换为bool的情况下赋值'false'。