是否可以在 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()
函数。