请教:枚举类型与数字能否互相转换?

learning8899 2012-09-03 04:38:09
TCommandType = (ctEmptyCommand,ctAdd,ctModify);
能否根据枚举类型的值得到数字,比如如果为ctAdd,则返回一个数字1(也可能是2),
如果数字1,得到的枚举类型为ctAdd
请问大家有什么方法可以做到吗?
...全文
501 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
广州佬 2012-09-03
  • 打赏
  • 举报
回复
来个更直接的:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls ;


type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

type
TCommandType = (ctEmptyCommand,ctAdd,ctModify);

var
Form1: TForm1;

implementation

uses TypInfo;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);//函数应用:
var v: TCommandType;
v_int:integer;
begin
v:=ctAdd;
v_int:=2;
//枚举类型的值得到数字:
showmessage(inttostr(ord(v)));
//数字得到枚举类型值的名:
showmessage( GetEnumName(TypeInfo(TCommandType),v_int));
end;

end.
广州佬 2012-09-03
  • 打赏
  • 举报
回复

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, TypInfo ;


type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

type
TCommandType = (ctEmptyCommand, ctAdd, ctModify);
TCommandTypeConvert=class
public
class function CommandToString(ACommand: TCommandType): string;
class function StringToCommand(const AStrCommand: string): TCommandType;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}


class function TCommandTypeConvert.CommandToString(
ACommand: TCommandType): string;
begin
Result := GetEnumName(TypeInfo(TCommandType),Ord(ACommand));
end;

class function TCommandTypeConvert.StringToCommand(
const AStrCommand: string): TCommandType;
begin
Result := TCommandType(GetEnumValue(TypeInfo(TCommandType), AStrCommand));
end;

procedure TForm1.Button1Click(Sender: TObject);//函数应用:
var v: TCommandType;
begin
v:=ctAdd;
//枚举类型的值得到数字:
showmessage(inttostr(ord(v)));
//数字得到枚举类型值的名:
showmessage(TCommandTypeConvert.CommandToString(TCommandType(1)));
end;

end.
  • 打赏
  • 举报
回复
强制类型转换即可。
看那山瞧那水 2012-09-03
  • 打赏
  • 举报
回复
先定义常量
const
Const_enum1 = 1;
Const_enum2 = 2;
........
Const_enum15 = 15;

然后定义枚举:
如果是顺序的:
type
TMyEnum = (me01 = Const_enum1,...,me15);
如果不是顺序的:
TMyEnum = (me01 = Const_enum1,me02=Const_enum2...,me15=Const_enum15);

然后就是Ord(me01)=Const_enum1;TMyEnum(Const_enum1)=me01;


kaikai_kk 2012-09-03
  • 打赏
  • 举报
回复
默认是从0开始的,后面递增,即等价于下面这样:
TCommandType = (ctEmptyCommand=0,ctAdd,ctModify);

也可以改成
TCommandType = (ctEmptyCommand=3,ctAdd,ctModify);

取序数用Ord
第1种Ord(ctAdd),结果是1
第2种Ord(ctAdd),结果是4
learning8899 2012-09-03
  • 打赏
  • 举报
回复
谢谢bdmh
var
x:TCommandType
i:integer;
begin
if x = ctEmptyCommand then i := 0
else ....
//如果枚举类型有好几十个,有好办法写出来吗?

if i = 0 then x := ctEmptyCommand
else ....
//几十个if语句,或许可以用case of,但是万一顺序弄错了,后面的全错了,
//有没有类似ord之类的简单方法呢?

end;
bdmh 2012-09-03
  • 打赏
  • 举报
回复
可以,不过要对应,比如 ctEmptyCommand是0,后面加一,如果 ctEmptyCommand=2,那么 ctEmptyCommand对应的是2,后面依次加一
bdmh 2012-09-03
  • 打赏
  • 举报
回复
可以,不过要对应,比如 ctEmptyCommand是0,后面加一,如果 ctEmptyCommand=2,那么 ctEmptyCommand对应的是2,后面依次加一

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧