可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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.