当我尝试将object
转换为bool
时,我收到了一条奇怪的错误消息,这是我的代码:
public partial class ModifierAuteur : DevExpress.XtraEditors.XtraForm
{
public ModifierAuteur(object getKeyDecesCheckBox)
{
decesCheckBox.Checked = getKeyDecesCheckBox == null ? null : (bool)getKeyDecesCheckBox;
}
}
这是错误消息:
由于存在,因此无法确定条件表达式的类型
之间没有隐式转换<null>
和bool
答案 0 :(得分:20)
假设可以进行分配,您需要转换为可以为空的bool
,如下所示:
decesCheckBox.Checked = getKeyDecesCheckBox == null ? null : (bool?)((bool)getKeyDecesCheckBox);
bool
的内部强制转换将值展开,而bool?
的外部强制转换使其与条件表达式的null
兼容。
如果作业的左侧不允许null
,则需要确定getKeyDecesCheckBox
为null
时要设置的值。通常,这是一个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
。因此,您必须提供false
或true
。
答案 3 :(得分:0)
你的'? :'运算符有两种可能的不兼容返回类型:如果对象为null,则返回值null,可以将其强制转换为任何可以为null的类型。如果对象不为null,则其返回类型为bool。
我不知道'Checked'是什么类型,但我怀疑它的类型是'bool'。
这里的问题是你不能将null转换为'bool'类型,因此在对象为null的情况下你必须决定你希望它是什么类型。如果您希望它是假的,您可以将语句写成:
decesCheckBox.Checked = (getKeyDecesCheckBox as bool) ?? false;
??运算符在对象为空或无法转换为bool的情况下赋值'false'。