整数到枚举类型为var?

时间:2013-12-19 16:16:22

标签: delphi

例如我有枚举

const
  MY_FIRST = 1;
  MY_SECOND = 2;
  MY_THIRD = 3;
type
  TMyEnum = MY_FIRST .. MY_THIRD;

我的功能就像

procedure DoSomething(var _type: TMyEnum);

我应该将integer作为TMyEnum传递给我。 通过做

var
  some_int_value: integer;
begin

DoSomething(TMyEnum(some_int_value));

我有错误[DCC Error] : E2197 Constant object cannot be passed as var parameter。怎么解决这个问题?

2 个答案:

答案 0 :(得分:4)

var参数需要一个实数变量,例如:

var
  some_int_value: integer;
  my_enum: TMyEnum;
begin
  my_enum := TMyEnum(some_int_value);
  DoSomething(my_enum);
  some_int_value := Ord(my_enum);

答案 1 :(得分:4)

由于TEnumInteger的子范围,因此编译器仅使用适合此子范围的最小可能类型。在这种情况下,它是Byte

因此,如果some_int_value被声明为Byte,那么您的类型转换就会成功。但实际上它被声明为Integer,因此类型转换引入了一个临时Byte来存储类型转换的结果。编译器没有那么做,以便将对此temprary Byte的任何更改写回到类型转换的源。这就是你得到描述错误的原因。