Delphi 整数到枚举类型作为var?

Delphi 整数到枚举类型作为var?,delphi,Delphi,例如,我有enum 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_in

例如,我有enum

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错误]:E2197常量对象不能作为var参数传递。如何解决这个问题?

一个
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);

由于
TEnum
Integer
的子范围,编译器只使用适合此子范围的最小可能类型。在这种情况下,它是一个
字节


因此,如果
某些int值
被声明为
字节
,则您的类型转换将成功。但是它实际上被声明为
整数
,因此类型转换引入了一个临时的
字节
,以存储类型转换的结果。编译器不会将对这个临时字节的任何更改写回typecast的源代码。这就是为什么会出现所描述的错误。

尽管听起来有些迂腐,但您所声明的实际上并不是枚举,而是一些常量和整数子范围类型。枚举声明将删除常量,并将现有的
TMyEnum
替换为
TMyEnum=(MY_FIRST,MY_SECOND,MY_THIRD)
,或者更习惯地说,
TMyEnum=(meFirst,meSecond,meThird)。实际上它是enum,而它是C代码。有些东西我们不能从C翻译成Delphi 1x1。