15

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

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

这是错误消息:

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

4

4 回答 4

25

假设分配是可能的,您需要转换为 nullable bool,如下所示:

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

内部转换为bool取消装箱值,外部转换bool?使其与null条件表达式兼容。

如果赋值左侧不允许nulls,则需要确定要设置的值 when getKeyDecesCheckBoxis null。通常,这是一个false

 decesCheckBox.Checked = getKeyDecesCheckBox == null ? false : (bool)getKeyDecesCheckBox;
于 2012-10-07T12:12:29.380 回答
3

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

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

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

decesCheckBox.Checked = (getKeyDecesCheckBox == null ? (bool?)null : (bool?)getKeyDecesCheckBox).GetValueOrDefault();
于 2012-10-07T12:34:14.477 回答
0

decesCheckBox.Checked是类型bool。因此,您必须喂它falsetrue

于 2012-10-07T12:27:08.657 回答
0

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

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

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

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

这 ??运算符在对象为空或无法转换为布尔值的情况下分配值“假”。

于 2012-10-07T12:33:04.733 回答