通用方法枚举到字符串转换

时间:2011-07-15 05:49:03

标签: c#

我已经看到很多使用泛型将字符串转换为枚举的方法,但找不到使用泛型将枚举转换为字符串的简洁方法。

我的意思是传递枚举和值并返回枚举的映射名称。

任何建议

4 个答案:

答案 0 :(得分:6)

怎么样:

enum E
{
    A = 2,
    B = 3
}

public static string GetLiteral<T>(object value)
{
    return Enum.GetName(typeof(T), value);
}

static void Main(string[] args)
{
    Console.WriteLine(GetLiteral<E>(2));
    Console.WriteLine(GetLiteral<E>(3));
}

答案 1 :(得分:3)

我会写一个扩展方法,例如

using System.ComponentModel;

public enum StatusResult
{
    [Description("Success")]
    Success,
    [Description("Failure...")]
    Failure
}

public static class AttributesHelperExtension
{
    public static string ToDescription(this Enum value)
    {
        DescriptionAttribute[] da = (DescriptionAttribute[])(value.GetType().GetField(value.ToString())).GetCustomAttributes(typeof(DescriptionAttribute), false);
        return da.Length > 0 ? da[0].Description : value.ToString();
    }

    public static T ToEnum<T>(this string stringValue, T defaultValue)
    {
        foreach (T enumValue in Enum.GetValues(typeof(T)))
        {
            DescriptionAttribute[] da = (DescriptionAttribute[])(typeof(T).GetField(enumValue.ToString())).GetCustomAttributes(typeof(DescriptionAttribute), false);
            if (da.Length > 0 && da[0].Description == stringValue)
                return enumValue;
        }
        return defaultValue;
    }
}

现在调用此用法

string value = StatusResult.Failure.ToDescription();

答案 2 :(得分:3)

当你知道枚举的值和类型但你想要获得匹配值的枚举实例时,这是有效的。

    static T ConvertToEnum<T>(object value)
    {
        return (T) Enum.Parse(typeof(T), Enum.GetName(typeof(T), value));             
    }


    static void Main(string[] args)        
    {             
        Gender g1 = ConvertToEnum<Gender>(0); //Male
        Gender g2 = ConvertToEnum<Gender>(1); //Female
        Gender g3 = ConvertToEnum<Gender>(2); //*BANG* exception             
    }

答案 3 :(得分:2)

我偶然发现过这种方法。

它使用扩展程序,并且应始终返回enum

    public static T ToEnum<T>(this string type, T defaultEnum) 
    {
        T holder;
        try
        {
            holder = (T)Enum.Parse(typeof(T), type);
        }
        catch 
        {
            holder = defaultEnum;
        }
        return holder;
    }