怎么获取enum的变量名称

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么获取enum的变量名称相关的知识,希望对你有一定的参考价值。

假设一个枚举类型

typedef enum NUMBERLIST


int ZERO = 0;

int ONE = 1;

int TWO = 2;

NUMBER;

NUMBER num;

现在我要如何用简单的方法根据num的值获得“ZERO”,“ONE”之类的字符串变量?用switch或者if不可行,实际的变量数非常多
忘记说了,是用C的方法实现,编译器是gcc,楼下那些C#或者C++的方法没法用

将枚举的值转换为对应的名字
inthashCode = Color.Red.GetHashCode(); stringenumParseStr = Enum.Parse(typeof(Color), hashCode.ToString()).ToString();Enum.Parse()得到的值是object类型的,我们要转换的是值,得到的是名字,因此ToString()得到名字。

将枚举的名字转换为对应的值
stringstr = Color.Red.ToString(); intenumParseInt = Convert.ToInt32(Enum.Parse(typeof(Color), str));这里要转换的是名字,得到的是值,因此用Convert.ToInt32()得到该值。
参考技术A c语言里的枚举实际上是结构体,枚举项是变量名,没法直接获得的……你可以再自己定义一个字符串数组:
char numberString[30][MAX_LENGTH]="ZERO","ONE","TWO"
在需要用到原来枚举的地方这样调用
numberString[num.ZERO]追问

如果没办法那就算了,有8000多个枚举项,有用的也有好几百,这样会累死。。。谢谢

追答

或者你可以借助其他语言编程,根据原来的枚举,生成字符串数组,把原来枚举的代码复制到一个txt文件里,一行一行读取,分析,生成对应的数组。

本回答被提问者采纳
参考技术B tostring方法。
----------------
回答你的补充提问:
我觉得那样为什么要定义成枚举?定义成数组也许好些吧?或者定义哈希表之类的对应起来,
两者可以互相查。追问

这个是历史原因,改不了。。。请问就没有用C的方法了么

参考技术C 可以这样做:
NUMBERLIST s = (NUMBERLIST)Enum.Parse(typeof(NUMBERLIST), 1);

以上是关于怎么获取enum的变量名称的主要内容,如果未能解决你的问题,请参考以下文章

c的printf怎么输出枚举类型变量

Enum介绍

第二天C#学习

c#中的静态变量,怎么通过反射的方式获取指定变量名称的值呢?比如说一个const类型的常量:con

gdb - 获取寄存器的变量名

您可以从类中获取实例变量名称吗? [复制]