作者:真理难辩_175 | 来源:互联网 | 2023-02-08 11:13
是否可以在Delphi中将枚举值转换/转换为Integer?
如果是,那怎么样?
1> David Heffer..:
这在枚举类型的文档中明确调出:
几个预定义函数对序数值和类型标识符进行操作.其中最重要的概述如下.
| 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)`?
@Delmo使用`Ord`以避免演员.
@Delmo作为一项规则,人们应该避免类型转换,因为它打破了类型安全.在这种情况下,它足够安全.你为什么不喜欢使用`Ord`?
2> MartynA..:
在我写这篇文章时,我看到大卫给你发了一个很好的答案,但无论如何我都会发布它:
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.