在 Delphi 中将枚举值转换为整数

问题描述 投票:0回答:4

是否可以在 Delphi 编程语言中将枚举值转换/转换为整数?

如果是,那么如何?

delphi casting integer pascal enumeration
4个回答
28
投票

这在枚举类型文档中明确指出:

几个预定义函数对序数值和类型标识符进行操作。其中最重要的总结如下。

|功能|参数|返回值 |备注 |
|----------|:------------------------------------ ----------------:|-------------------------------- --:|-------------------------------------------------------- -----|
|订单|序数表达式|表达式值的序数 |不接受 Int64 参数。 |
|普雷德 |序数表达式 |表达式值的前导 | |
|苏克 |序数表达式|表达式值的后继者 | |
|高|序数类型标识符或序数类型变量 |类型中的最高值 |还可以对短字符串类型和数组进行操作。 |
|低|序数类型标识符或序数类型变量 |类型中的最低值 |还可以对短字符串类型和数组进行操作。 |

18
投票

我看到大卫在我写这篇文章的时候给你发了一个很好的答案,但无论如何我都会发布它:

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.

4
投票

将枚举转换为整数是可行的。我无法评论其他答案,因此将其发布为答案。转换为整数可能是一个坏主意(如果是,请发表评论)。

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;

2
投票

您可以使用

Ord()
功能来实现此目的。为了清楚起见,最好编写一对
IntToEnum()
EnumToInt()
函数。

© www.soinside.com 2019 - 2024. All rights reserved.