C#:”和’bool’之间的隐式转换

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

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

这是错误信息:

无法确定条件表达式的类型,因为bool之间没有隐式转换

假设可以进行赋值,则需要转换为可空的bool ,如下所示:

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

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

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

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

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

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

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

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

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

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

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

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

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

?? ?? 在对象为null或无法转换为bool的情况下,运算符会赋值’false’。