关于.net:获取Enum值的名称

Get the name of Enum value

我正在尝试创建一个函数,在这里我们可以得到一个枚举值的名称值

例如:

1
Get_Enum_ValueName(DayOfWeek, 0)

…这将返回"星期日"。

但我的代码不起作用,它说类型没有定义:

1
2
3
Private Function Get_Enum_ValueName(Of T)(ByVal EnumName As T, ByVal EnumValue As Integer) As String
    Return DirectCast([Enum].Parse(GetType(EnumName), EnumValue ), EnumName).ToString
End Function


给定一个enum

1
2
3
4
5
6
7
8
9
10
public enum Week
{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
}

以下是您可以做的事情:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
static void Main(string[] args)
{

    // enum to int
    int i=(int)Week.Thursday;

    // int to enum;
    Week day=(Week)3;

    // enum to string
    string name=Week.Thursday.ToString();
    string fun=Enum.GetName(typeof(Week), 6);
    string agh=Enum.GetName(typeof(Week), Week.Monday);
    string wed=EnumName(Week.Wednesday);

    // string to enum
    Week apt=(Week)Enum.Parse(typeof(Week),"Thursday");

    // all values of an enum type
    Week[] days=(Week[])Enum.GetValues(typeof(Week));

    // all names of an enum type
    string[] names=Enum.GetNames(typeof(Week));

}

static string EnumName<T>(T value)
{
    return Enum.GetName(typeof(T), value);
}


在c中,这是:

1
return Enum.ToObject(typeof(T), EnumValue).ToString();

或(等):

1
return ((T)(object)(EnumValue)).ToString();


1
2
3
4
5
6
7
8
9
10
11
12
public enum WeekDay
{
    Monday = 1,
    Tuesday = 2,
    Wednesday = 3,
    Thursday = 4,
    Friday = 5,
    Saturday = 6,
    Sunday = 7
}

string s = WeekDay.Friday.ToString();

就这么简单…除非我误解了什么?

如果你只有电话号码:

1
string s = ((WeekDay)4).ToString();

更新

好吧,下次你应该提到你想要一些普通的东西。用于所有枚举,而不仅仅是该特定示例。您可以尝试以下操作:

1
2
3
4
5
6
7
8
9
10
11
12
public static class EnumExtensions
{
    public static T ToEnum<T>(this int value) where T : struct
    {
        return (T)(object)value;
    }

    public static string ToEnumName<T>(this int value) where T : struct
    {
        return ((T)(object)value).ToString();
    }
}

这样使用:

1
2
int someEnumValue = 4;
string name = someEnumValue.ToEnumName<WeekDay>();

或:

1
WeekDay weekDay = someEnumValue.ToEnum<WeekDay>();

不过,我仍然不认为这是真正必要的,因为您仍然需要知道枚举的类型…因此:

这个:string name = ((WeekDay)someEnumValue).ToString();

还有这个string name = someEnumValue.ToEnumName();

是等价的…但是…任何适合你的。