我正在使用ASP.NET并在使用Enum
时遇到一些小问题:
public enum Lang : byte
{
en = 0,
fr = 1
}
Lang value = Lang.en;
string name = Enum.GetName(typeof(Lang), value); // "en"
它有效。因为我改成了:
@foreach (SelectListItem lang in Html.GetEnumSelectList<Lang>())
{
string name = Enum.GetName(typeof(Lang), lang.Value);
}
我收到此错误消息:
ArgumentException:传入的值必须是枚举基础或枚举的基础类型,例如Int32。 参数名称:值
然后,我试过了:
string name = Enum.GetName(typeof(Lang), Convert.ToInt32(lang.Value));
它有效。
为什么?
Lang.en
是byte
,为什么需要Int32
?
答案 0 :(得分:1)
如果我们查看Enum.GetName
的文档,我们可以阅读:
<强>的ArgumentException 强>:
*enumType
不是Enum
OR
*value
既不属于enumType
类型,也不具有与enumType
相同的基础类型
问题是,在您的第二种方法中,您使用的是Convert.ToInt32(lang.Value)
,因此您的枚举需要获得Int32
而不是byte
:
public enum Lang : byte
因此,简单的解决方案是传递byte
而不是int
:
string name = Enum.GetName(typeof(Lang), Convert.ToByte(lang.Value));