Подтвердить что ты не робот

Как преобразовать целое число в нумерованный тип?

Я знаю, как преобразовать перечислимый тип в целое число.

type
  TMyType = (mtFirst, mtSecond, mtThird); 

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

Но как мне сделать обратную операцию и преобразовать целое число в нумерованный тип?

4b9b3361

Ответ 1

Как ответил Кен, вы просто бросили его. Но чтобы убедиться, что у вас есть правильное значение, вы можете использовать код:

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

Ответ 2

Вы можете отличить целое число, указав его на нумерованный тип:

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

Ответ 3

Позаботьтесь о кастинге, потому что для этого требуется полное сопоставление с вашим порядковым типом и целыми числами. Например:

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