Fab*_*zio 2 delphi enums delphi-xe7
我已经InRange在我的枚举器类型上定义了一个函数。True如果传递的整数参数可以转换为枚举器类型,则该函数应该返回。
TMyEnum = (eA, eB);
TMyEnumHelper = record helper for TMyEnum
class function InRange(AValue : integer) : Boolean; static;
end;
...
class function TMyEnumHelper.InRange(AValue : integer) : Boolean;
begin
Result :=
(AValue >= Low(TMyEnum)) and
(AValue <= High(TMyEnum));
end;
Run Code Online (Sandbox Code Playgroud)
在编译时,在该行(AValue >= Low(TMyEnum)),我收到以下错误:
[dcc32 错误] Unit1.pas(34): E2008 不兼容的类型
我做了一些测试,但我真的不明白出了什么问题......即:
AValue参数类型切换InRange为Byte, ShortInt, Word, SmallInt, LongWord, Cardinal, LongInt, Integerand Int64,但在编译时会引发相同的错误。TMyEnum = 0..1;,则编译时不会出错。您不能直接将枚举值与整数进行比较。您必须将枚举值转换为整数值才能进行比较:
class function TMyEnumHelper.InRange(AValue : integer) : Boolean;
begin
Result :=
(AValue >= Ord(Low(TMyEnum))) and
(AValue <= Ord(High(TMyEnum)));
end;
Run Code Online (Sandbox Code Playgroud)
请注意添加的“ord”强制转换,它将其“参数”(括号内的表达式)转换为整数值。
你的原因
TMyEnum = 0..1;
Run Code Online (Sandbox Code Playgroud)
有效的是这不是枚举,而是整数子范围,因此 TMyEnum 的基本类型是整数而不是枚举。
| 归档时间: |
|
| 查看次数: |
213 次 |
| 最近记录: |