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 |
给定一个
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>(); |
不过,我仍然不认为这是真正必要的,因为您仍然需要知道枚举的类型…因此:
这个:
还有这个
是等价的…但是…任何适合你的。