怎么获取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的变量名称的主要内容,如果未能解决你的问题,请参考以下文章