Reputation: 2619
I know how to convert an enumerated type to an integer.
type
TMyType = (mtFirst, mtSecond, mtThird);
var
ordValue:integer;
enumValue:TMyType;
...
ordValue:= Ord(mtSecond); // result is 1
But how do I do the inverse operation and convert an integer to an enumerated type?
Upvotes: 29
Views: 25346
Reputation: 22749
As Ken answered, you just cast it. But to make sure you have correct value you can use code like:
if (ordValue >= Ord(Low(TMyType))) and (ordValue <= Ord(High(TMyType))) then
enunValue := TMyType(ordValue)
else
raise Exception.Create('ordValue out of TMyType range');
Upvotes: 31
Reputation: 81
Take care with casting because it requires full mapping with your ordinal type and integers. For example:
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
Upvotes: 8
Reputation: 125620
You can cast the integer by typecasting it to the enumerated type:
ordValue := Ord(mtSecond);
enumValue := TMyType(ordValue);
Upvotes: 21