Подтвердить что ты не робот

Получить имя значения 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
4b9b3361

Ответ 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>();

эквивалентны... но.. все, что вам подходит.