如何将整数转换为枚举类型?

lyb*_*rko 23 delphi integer enumeration casting

我知道如何将枚举类型转换为整数.

type
  TMyType = (mtFirst, mtSecond, mtThird); 

var 
  ordValue:integer;
  enumValue:TMyType;
...
ordValue:= Ord(mtSecond); // result is 1
Run Code Online (Sandbox Code Playgroud)

但是,如何进行逆运算并将整数转换为枚举类型?

ain*_*ain 24

肯回答说,你就是投了它.但为了确保您具有正确的价值,您可以使用以下代码:

if (ordValue >= Ord(Low(TMyType))) and (ordValue <= Ord(High(TMyType))) then
    enunValue := TMyType(ordValue)
else 
    raise Exception.Create('ordValue out of TMyType range');
Run Code Online (Sandbox Code Playgroud)

  • 哦,你可以使用RTTI来获得允许的范围,从而整理这段代码 (4认同)
  • 当你的枚举不连续时要小心. (3认同)

Ken*_*ite 20

您可以通过将类型转换为枚举类型来强制转换整数:

ordValue := Ord(mtSecond);
enumValue := TMyType(ordValue);
Run Code Online (Sandbox Code Playgroud)


小智 7

注意使用强制转换,因为它需要使用序数类型和整数进行完全映射.例如:

type Size = (Small = 2, Medium = 3, Huge = 10);
var sz: Size;
...
sz := Size(3); //means sz=Medium
sz := Size(7); //7 is in range but gives sz=outbound
Run Code Online (Sandbox Code Playgroud)