为什么这是一个无效的强制转换
本文关键字:无效 转换 一个 为什么 | 更新日期: 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()
- 枚举。解析()