我在枚举器类型上定义了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;在编译时,在(AValue >= Low(TMyEnum))行,出现以下错误: [dcc32错误] Unit1.pas(34):E2008不兼容的类型我做了一些测试,但我真的不明白怎么了...即:我尝试将AValue函数的InRange参数类型切换为Byte,ShortInt,Word,SmallInt,LongWord,Cardinal,LongInt,Integer和,但在编译时会引发相同的错误。如果将枚举器定义为Int64,则编译时不会出错。 (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 您不能直接将枚举值与整数进行比较。您必须将枚举值转换为整数值才能进行比较:class function TMyEnumHelper.InRange(AValue : integer) : Boolean;begin Result := (AValue >= Ord(Low(TMyEnum))) and (AValue <= Ord(High(TMyEnum)));end;请注意添加的“ ord”强制转换,它将其“参数”(括号内的表达式)转换为整数值。你的原因TMyEnum = 0..1;可行的是,这不是枚举,而是整数子范围,因此TMyEnum的基本类型是整数而不是枚举。 (adsbygoogle = window.adsbygoogle || []).push({});
10-05 22:42