从c#中任何枚举类型的枚举对象中获取枚举和字符串值的名称

时间:2017-12-01 15:28:54

标签: c# enums

我一直试图实现这一目标。 我似乎有一些类似的答案,但它对我没有用。 我不是C#的专家所以要注意。 (我甚至不知道这是否可能实现)

所有枚举都属于同一类。 所有数字都是唯一的。

  

我的问题:

enum BAR
{
    A = 0,
    B = 1
{

enum FOO
{
    C = 2,
    D = 3
}

public static string GetEnumName(object o)
{
    // Need help here
}

public static string GetName(object o)
{
    // Need help here
}
  

使用示例:

     

GetEnumName(bar.a的); // result = BAR

     

的GetName(bar.a的); // result = A

     

GetEnumName(foo.c的); //结果= FOO

     

的GetName(foo.c的); // result = C

5 个答案:

答案 0 :(得分:4)

您可以使用这些方法(使用Enum作为参数类型而不是Object):

public static string GetEnumName(Enum input)
{
    return input.GetType().Name;
}

public static string GetName(Enum input)
{
    return Enum.GetName(input.GetType(), input);
}

答案 1 :(得分:2)

GetName方法过度杀伤:

FOO.C.ToString();

或者你有一个变量:

object o = FOO.C;
o.ToString();

会得到你" C"结果。

对于GetEnumName,您可以使用:

FOO.C.GetType().Name;

object o = FOO.C;
o.GetType.Name;

最后,如果您的两种方法确实只适用于枚举值,则输入值不应为object,而应为Enum,以强制执行某种级别的类型安全。

public static string GetName(Enum value)

public static string GetEnumName(Enum value)
坦率地说,你花时间在评论中争论而不是仅仅尝试这些东西,这有点令人失望。

答案 2 :(得分:1)

静态Enum类有一个方法来获取给定Enum类型和值的常量值的名称。请参阅相关的documentation here。但是,作为参考,它就像

一样简单
Enum.GetName(typeof(Foo), value);

当我不知道使用Enum的类型时(例如,当我使用通用的时候),我会使用它。

要获取Enum的名称,您必须对类型进行一点反思。

typeof(value).toString()

答案 3 :(得分:1)

    Below code should give you some idea....
    static void Main(string[] args)
    {
        Console.WriteLine($"GetEnumName(FOO.D):{GetEnumName(FOO.D)}");
        Console.WriteLine($"GetName(FOO.D):{GetName(FOO.D)}");
        Console.Read();
    }

    public static string GetEnumName(object o)
    {
        // Need help here
        Type t = o.GetType();
        return t.Name;
    }

    public static string GetName(object o)
    {
        // Need help here
        return o.ToString();
    }

答案 4 :(得分:-1)

    public static string GetEnumName(object o)
    {
        if ( o is Enum)
            return o.GetType().Name;
        return null;
    }

    public static string GetName(object o)
    {
        if (o is Enum)
        {
            return Enum.GetName(o.GetType(), o);
        }

        return null;
    }