是否可以在 Delphi 中将枚举值转换为整数?
如果是,那怎么做?
这在枚举类型的文档中明确指出:
几个预定义函数对序号值和类型标识符进行操作。其中最重要的总结如下。
|功能 | 参数 | 返回值 |备注 | |----------|:-----------------------------------------------------:|----------------------------------:|---------------------------------------------------| |奥德 | 序数表达式 | 表达式值的序数 |不接受 Int64 参数。 | |捕食 | 序数表达式 |表达式值的前身 | | |苏克 | 序数表达式 | 表达式值的继承者 | | |高 |序号类型标识符或序号类型的变量 |类型中的最高值 |也适用于短字符串类型和数组。| |低 |序号类型标识符或序号类型的变量 |类型中的最小值 |也适用于短字符串类型和数组。|
我看到大卫在我写这篇文章的时候给你发了一个很好的答案,但我还是会发帖:
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;
你可以使用 Ord() 函数来实现这一点。 为了清楚起见,最好写一对 IntToEnum() 和 EnumToInt() 函数。