2012-01-04 19 views
19

私は、列挙型を整数に変換する方法を知っています。整数を列挙型に変換するにはどうすればよいですか?

type 
    TMyType = (mtFirst, mtSecond, mtThird); 

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

は、しかし、どのように、私は逆の操作を行うと、列挙型の整数に変換するのですか?

+0

タイプ TMyType =(mtFirst = 1、mtSecond = 2、mtThird = 3)。 var ordValue:整数。 enumValue:TMyType; ordValue:=整数(mt秒); //結果は2 –

答えて

20

が、あなたはそれをキャスト。しかし、あなたはあなたのようなコードを使用することができ、正しい値ていることを確認する:それはあなたの順序型と整数との完全なマッピングを必要とするため、鋳造に注意してください

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

ありがとう...私はRTTIにどこか掘っていた...ええと... – lyborko

+4

ああRTTIを使用することができます許容範囲を取得してこのコードを整理してください –

+1

@KenWhite AFAIKは範囲外の値を列挙型にキャストでき、例外を発生させることはありません。範囲チェックを自分で記述する必要があります。 – ain

19

あなたは列挙型に型キャストによって、整数をキャストすることができます:ケンは答えたよう

ordValue := Ord(mtSecond); 
enumValue := TMyType(ordValue); 
+0

ああ、はい...ありがとう、私はそれが何か自明であることを知っていた... :-) – lyborko

5

を。例えば:

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 
関連する問題