我一直试图实现这一目标。 我似乎有一些类似的答案,但它对我没有用。 我不是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
答案 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;
}