25

EnumValue の Namevalue を取得できる関数を作成しようとしています

例えば:

Get_Enum_ValueName(DayOfWeek, 0)

...これは「Sunday」を返します。

しかし、私のコードは機能しません。型が定義されていないと言っています:

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
4

3 に答える 3

39

与えられた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);
}

編集 1

基になる数値に基づいてenum別の型に変換する (整数に変換し、整数から変換する) 場合は、次を使用します。enum

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

として使用する

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

static void Main(string[] args)
{
    var day = WeekEnd.Saturday.CastTo<Week>();
    // Week.Sunday
}
于 2013-04-16T14:09:02.183 に答える
9
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();

アップデート

OK、次回は、その特定の例だけでなく、すべての列挙型に使用する汎用的なものが必要であることを言及する必要があります。これを試すことができます:

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

同等です...しかし..あなたに合ったものは何でも。

于 2013-04-16T14:23:54.500 に答える