web-dev-qa-db-ja.com

整数を列挙型に変換するにはどうすればよいですか?

列挙型を整数に変換する方法を知っています。

type
  TMyType = (mtFirst, mtSecond, mtThird); 

var 
  ordValue:integer;
  enumValue:TMyType;
...
ordValue:= Ord(mtSecond); // result is 1

しかし、どうすれば逆演算を実行して整数を列挙型に変換できますか?

25
lyborko

ケンが答えたように、あなたはそれをキャストしました。しかし、正しい値であることを確認するには、次のようなコードを使用できます。

if (ordValue >= Ord(Low(TMyType))) and (ordValue <= Ord(High(TMyType))) then
    enunValue := TMyType(ordValue)
else 
    raise Exception.Create('ordValue out of TMyType range');
26
ain

整数を列挙型に型キャストすることでキャストできます。

ordValue := Ord(mtSecond);
enumValue := TMyType(ordValue);
21
Ken White

順序型と整数での完全なマッピングが必要なため、キャストには注意してください。例えば:

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
7
user3140262