使用枚举GetName方法

时间:2017-10-05 21:49:37

标签: c# asp.net enums

我正在使用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.enbyte,为什么需要Int32

1 个答案:

答案 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));