Получить имя значения Enum
Я пытаюсь сделать функцию, где мы можем получить значение Name of EnumValue
Например:
Get_Enum_ValueName(DayOfWeek, 0)
... Это вернет " Воскресенье".
Но мой код не работает, он говорит, что тип не определен:
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
Учитывая enum
public enum Week
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
вот что вы можете сделать:
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
В С# это будет:
return Enum.ToObject(typeof(T), EnumValue).ToString();
или (равно):
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();
просто как это... если я что-то не понимаю?
И если у вас есть только номер:
string s = ((WeekDay)4).ToString();
UPDATE
ОК, в следующий раз вы должны упомянуть, что хотите что-то общее... использовать для всех перечислений, а не только для этого конкретного примера. Вы можете попробовать следующее:
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();
}
}
Используйте это:
int someEnumValue = 4;
string name = someEnumValue.ToEnumName<WeekDay>();
или
WeekDay weekDay = someEnumValue.ToEnum<WeekDay>();
Я все еще не думаю, что это действительно необходимо, потому что вам все равно нужно знать тип переименования в любом случае... так что:
Это: string name = ((WeekDay)someEnumValue).ToString();
и это string name = someEnumValue.ToEnumName<WeekDay>();
эквивалентны... но.. все, что вам подходит.