C语言怎样取得枚举型的名字 而不是值

C语言怎样取得枚举型的名字 而不是值,第1张

在C语言中,枚举类型是被当做int或者unsigned int类型来处理的,所以按照C语言规范是没有办法遍历枚举类型的。

不过在一些特殊的情况下,可以实现有条件的遍历。

1 枚举类型必须连续。

由于枚举类型支持如下方式定义:

enum

{

ENUM_0,

ENUM_10 = 10,

ENUM_11

};

这样就会导致枚举类型不连续,这种枚举无法遍历。

2 枚举类型中人为加入起始及结束标记。

enum

{

ENUM_START,

ENUM_0,

ENUM_1,

ENUM_2,

ENUM_END

};

可以看到,在这个枚举类型中,人为加入可ENUM_START, 和ENUM_END。中间的ENUM_0,ENUM_1,ENUM_2才是实际的有效数据。当后续需要增删枚举元素时,也要保证ENUM_START, 和ENUM_END分别为最小和最大值。

满足以上两种条件下,就可以做枚举的遍历了,参考代码如下:

int i;

for(i = ENUM_START+1; i<ENUM_END; i ++)

{

//使用枚举元素。

}

这个循环中,i的值就是所有有效的枚举元素值。

将枚举的值转换为对应的名字

inthashCode = ColorRedGetHashCode(); stringenumParseStr = EnumParse(typeof(Color), hashCodeToString())ToString();EnumParse()得到的值是object类型的,我们要转换的是值,得到的是名字,因此ToString()得到名字。

将枚举的名字转换为对应的值

stringstr = ColorRedToString(); intenumParseInt = ConvertToInt32(EnumParse(typeof(Color), str));这里要转换的是名字,得到的是值,因此用ConvertToInt32()得到该值。

foreach (WeekDay c in (WeekDay [])EnumGetValues(typeof(WeekDay )))

{

ConsoleWrite(StringFormat("{0}是一周第{1}天",cToString(),(int)c));

}

楼上的。。mysql里有这种类型,是一种字符串类数据列类型

ENUM('value1','value2',) 65535个成员 1或2字节

但是用的比较少。。。

你得写程序自己处理下,大概是下边这样

import javasqlConnection;

import javasqlDriverManager;

import javasqlResultSet;

import javasqlStatement;

public class EnumTesting {

Connection connection;

Statement statement;

public EnumTesting() {

try {

ClassforName("commysqljdbcDriver")newInstance();

connection = DriverManager

getConnection("jdbc:mysql://192168125/testuser=spider&password=spider");

} catch (Exception e) {

Systemerrprintln("Unable to find and load driver");

Systemexit(1);

}

}

public void doWork() {

try {

statement = connectioncreateStatement();

ResultSet rs = statement

executeQuery("SHOW COLUMNS FROM enumtest LIKE 'status'");

rsnext();

String enums = rsgetString("Type");

Systemoutprintln(enums);

int position = 0, count = 0;

String[] availableEnums = new String[10];

while ((position = enumsindexOf("'", position)) > 0) {

int secondPosition = enumsindexOf("'", position + 1);

availableEnums[count++] = enumssubstring(position + 1,

secondPosition);

position = secondPosition + 1;

Systemoutprintln(availableEnums[count - 1]);

}

rsclose();

statementclose();

connectionclose();

} catch (Exception e) {

eprintStackTrace();

}

}

public static void main(String[] args) {

Enum e = new Enum();

edoWork();

}

}

没有什么好办法,只有用switch。将输入的值储存到一个string变量中,然后swtich+case一长串

用enum没有意义的,因为enum在c++里经过编译后实际上就是多个const整型,你的定义其实差不多相当于

const int ROCK=0;

const int SCISSOR=1;

const int CLOTH=2;

……

当然还是有一定差距的,就是在于你可以定义一个变量,内容限定为enum中的这些整型的值。然后,就我所知,没有其他的差别了

所以完全没办法把他们关联到字符串上。

把枚举转换成int型就可以了

枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值。例如对枚举weekday的元素再作以下赋值:

sun=5;mon=2;sun=mon;

都是错误的。

枚举元素本身由系统定义了一个表示序号的数值

以上就是关于C语言怎样取得枚举型的名字 而不是值全部的内容,包括:C语言怎样取得枚举型的名字 而不是值、怎么获取enum的变量名称、C#循环输出ENUM内容和值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9355490.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存