Get the name of Enum value

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

Edit 1

If you want to convert from one enum to another enum of different type based on the underlying numeric value (convert to integer and from integer), then use the following:

/// <summary>
/// Casts one enum type to another based on the underlying value
/// </summary>
/// <typeparam name="TEnum">The type of the enum.</typeparam>
/// <param name="otherEnum">The other enum.</param>
public static TEnum CastTo<TEnum>(this Enum otherEnum)
{
    return (TEnum)Enum.ToObject(typeof(TEnum), Convert.ToInt32(otherEnum));
}

to be used as

public enum WeekEnd
{
    Saturday = Week.Saturday,
    Sunday = Week.Sunday
}

static void Main(string[] args)
{
    var day = WeekEnd.Saturday.CastTo<Week>();
    // Week.Sunday
}

Leave a Comment