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

Sha*_*elt 4 delphi pascal integer enumeration

是否可以在Delphi中将枚举值转换/转换为Integer?

如果是,那怎么样?

Dav*_*nan 19

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

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

| Function |                       Parameter                       |                      Return value | Remarks                                           |
|----------|:-----------------------------------------------------:|----------------------------------:|---------------------------------------------------|
| Ord      |                   Ordinal expression                  |  Ordinality of expression's value | Does not take Int64 arguments.                    |
| Pred     |                   Ordinal expression                  | Predecessor of expression's value |                                                   |
| Succ     |                   Ordinal expression                  |   Successor of expression's value |                                                   |
| High     | Ordinal type identifier or   variable of ordinal type | Highest value in type             | Also operates on short-string   types and arrays. |
| Low      | Ordinal type identifier or   variable of ordinal type | Lowest value in type              | Also operates on short-string   types and arrays. |

  • 然后......这可能是最好的做法`Ord(SomeEnumVariable)`或`Integer(SomeEnumVariable)`? (2认同)
  • @Delmo使用`Ord`以避免演员. (2认同)
  • @Delmo作为一项规则,人们应该避免类型转换,因为它打破了类型安全.在这种情况下,它足够安全.你为什么不喜欢使用`Ord`? (2认同)

Mar*_*ynA 9

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

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.
Run Code Online (Sandbox Code Playgroud)

  • “无论如何”,你发布这篇文章已经做得很好了,因为其他专家并不知道混淆 Enum 变量的含义是多么容易。当然有文档,但有很多理由跳过它。“一个例子可以节省大量理论”。 (3认同)