在德尔福中将枚举值强制转换为整数



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

最新更新