Get the name of Enum value

匿名 (未验证) 提交于 2019-12-03 02:13:02

问题:

I'm trying to make a function where we can get the Namevalue of a EnumValue

For example:

Get_Enum_ValueName(DayOfWeek, 0) 

...This will return "Sunday".

But my code don't works, it says the type is not defined:

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:

Given an enum

public enum Week {     Monday,     Tuesday,     Wednesday,     Thursday,     Friday,     Saturday,     Sunday } 

here are the things you can do:

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); } 


回答2:

In C#, that would be:

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

or (equally):

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


回答3:

public enum WeekDay {     Monday = 1,     Tuesday = 2,     Wednesday = 3,     Thursday = 4,     Friday = 5,     Saturday = 6,     Sunday = 7 }  string s = WeekDay.Friday.ToString(); 

simple as that... unless I am misunderstanding something?

And if you only have the number:

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

UPDATE

OK, next time you should mention that you want something generic.. to use for all enums and not just that specific example. You can try this:

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();     } } 

Use like this:

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

or:

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

I still don't think that is really necessary though, because you still need to know the type of enum anyway... so therefore:

This: string name = ((WeekDay)someEnumValue).ToString();

and this string name = someEnumValue.ToEnumName<WeekDay>();

are equivalent... but.. whatever suits you.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!