为什么这是一个无效的强制转换

本文关键字:无效 转换 一个 为什么 | 更新日期: 2023-09-27 17:59:11

我正在用自定义枚举值填充一个组合框:

    private enum AlignOptions
    {
        Left,
        Center,
        Right
    }
. . .
    comboBoxAlign1.DataSource = Enum.GetNames(typeof(AlignOptions));

当我尝试将所选项目分配给该枚举类型的var时,不过:

    AlignOptions alignOption;
. . .
    alignOption = (AlignOptions)comboBoxAlign1.SelectedItem;

它爆炸时显示:"未处理System.InvalidCastException消息=指定的强制转换无效"

该项目不是AlignOptions类型吗?

更新

当,我以为我很聪明。Ginosaji是对的,我不得不把它改成:

    alignOptionStr = comboBoxAlign1.SelectedItem.ToString();
    if (alignOptionStr.Equals(AlignOptions.Center.ToString()))
    {
        lblBarcode.TextAlign = ContentAlignment.MiddleCenter;
    }
    else if (alignOptionStr.Equals(AlignOptions.Left.ToString()))
    {
        . . .

为什么这是一个无效的强制转换

这是一个无效的强制转换,因为您没有枚举,您有枚举的字符串名称表示。要取回枚举,您需要对其进行解析。

alignOption = (AlignOptions)Enum.Parse(typeof(AlignOptions), (string)comboBoxAlign1.SelectedItem);

您应该使用Enum。GetValues方法初始化您的组合框:

comboBoxAlign1.DataSource = Enum.GetValues(typeof(AlignOptions));

现在combobox包含enum和的元素

AlignOptions alignOption = (AlignOptions)comboBoxAlign1.SelectedItem;

是正确的演员阵容。

Enum.GetNames()返回string[],因此每个项都是string,而不是AlignOptions

您可以通过以下方式获取枚举值:

    alignOption = (AlignOptions) Enum.Parse(typeof(AlignOption), 
                                              (string) comboBoxAlign1.SelectedItem);

参考文献:

  • 枚举。GetNames()
  • 枚举。解析()