在Delphi中,是否可以将枚举值转换为整数?
如果可以,那么如何转换?
在Delphi中,是否可以将枚举值转换为整数?
如果可以,那么如何转换?
这在枚举类型文档中明确指出:
几个预定义的函数操作于序数值和类型标识符。最重要的函数如下所述。
| 函数名 | 参数 | 返回值 | 备注 | |--------|:-------------------------------------------------:|------------------------------:|-----------------------------------------------| | Ord | 序数表达式 | 表达式值的序数 | 不接受Int64参数。 | | Pred | 序数表达式 | 表达式值的前驱 | | | Succ | 序数表达式 | 表达式值的后继 | | | High | 序数类型标识符或序数类型变量 | 类型中的最高值 | 还适用于短字符串类型和数组。 | | Low | 序数类型标识符或序数类型变量 | 类型中的最低值 | 还适用于短字符串类型和数组。 |
Ord(SomeEnumVariable)
还是 Integer(SomeEnumVariable)
? - DelmoOrd
,避免强制转换。 - David HeffernanOrd
? - David Heffernan我看到David在我写这个回答时已经给你发了一个不错的答案,但是我还是会发表我的看法:
program enums;
{$APPTYPE CONSOLE}
uses
SysUtils, typinfo;
type
TMyEnum = (One, Two, Three);
var
MyEnum : TMyEnum;
begin
MyEnum := Two;
writeln(Ord(MyEnum)); // writes 1, because first element in enumeration is numbered zero
MyEnum := TMyEnum(2); // Use TMyEnum as if it were a function
Writeln (GetEnumName(TypeInfo(TMyEnum), Ord(MyEnum))); // Use RTTI to return the enum value's name
readln;
end.
type
TMyEnum = (zero, one, two);
var
i: integer;
begin
i := integer(two); // convert enum item to integer
showmessage(inttostr(i)); // prints 2
end;
这个可能与Ord()类似,但我不确定哪个是最佳实践。如果您将枚举强制转换为整数,则上述方法也适用。
type
TMyEnum = (zero, one, two);
var
MyEnum: TMyEnum;
i: integer;
begin
MyEnum := two;
i := integer(MyEnum); // convert enum to integer
showmessage(inttostr(i)); // prints 2
end;
ShowMessage(IntToStr(High(Ord(two))))
与ShowMessage(IntToStr(High(Integer(two))))
进行比较。 - Sertac AkyuzOrd(MyEnum)
和Integer(MyEnum)
之间的最佳实践,我向@David提出了明确的问题。请查看David答案下的评论。 - Delmo您可以使用Ord()函数来实现。为了更清晰,最好编写一对IntToEnum()和EnumToInt()函数。
Ord(myEnumValue)
即可。 - MartynA