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,则需要确定getKeyDecesCheckBox
为null
时要设置的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
。 因此,您必须提供false
或true
。
您的 ‘? :’运算符有两种可能的不兼容返回类型:如果对象为null,则返回值null,可以将其强制转换为任何可空类型。 如果对象不为null,则其返回类型为bool。
我不知道’Checked’是什么类型,但我怀疑它的类型是’bool’。
这里的问题是你不能将null转换为’bool’类型,因此在对象为null的情况下你必须决定你希望它是什么类型。 如果你想要它是假的,你可以把语句写成:
decesCheckBox.Checked = (getKeyDecesCheckBox as bool) ?? false;
?? ?? 在对象为null或无法转换为bool的情况下,运算符会赋值’false’。