为什么这是一个无效的演员?

时间:2013-02-15 00:22:19

标签: c# casting combobox enums selecteditem

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

    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()))
    {
        . . .

3 个答案:

答案 0 :(得分:8)

它是一个无效的强制转换,因为你没有枚举,你有枚举的字符串名称表示。要重新获得该枚举,您需要解析它。

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

答案 1 :(得分:3)

您应该使用Enum.GetValues Method来初始化您的组合框:

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

现在,组合框包含枚举元素和

AlignOptions alignOption = (AlignOptions)comboBoxAlign1.SelectedItem;

是正确的演员。

答案 2 :(得分:1)

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

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

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

<强>参考文献: