gpt4 book ai didi

delphi - 如何检查整数是否可以转换为枚举类型值?

转载 作者:行者123 更新时间:2023-12-03 07:36:45 24 4
gpt4 key购买 nike

我已经在我的枚举器类型上定义了一个 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 Error] Unit1.pas(34): E2008 Incompatible types

我做了一些测试,但我真的不明白出了什么问题......即:

  1. 我尝试将 InRange 函数的 AValue 参数类型切换为 ByteShortIntWordSmallIntLongWordCardinalLongInt整数 > 和 Int64,但它在编译时会引发相同的错误。
  2. 如果我将枚举器定义为 TMyEnum = 0..1;,编译时不会出现错误。

最佳答案

您不能直接将枚举值与整数进行比较。您必须将枚举值转换为整数值才能进行比较:

class function TMyEnumHelper.InRange(AValue : integer) : Boolean;
begin
Result :=
(AValue >= Ord(Low(TMyEnum))) and
(AValue <= Ord(High(TMyEnum)));
end;

请注意添加的“ord”转换,它将其“参数”(括号内的表达式)转换为整数值。

你的原因

TMyEnum = 0..1;

工作原理是这不是枚举,而是整数子范围,因此 TMyEnum 的基本类型是整数而不是枚举。

关于delphi - 如何检查整数是否可以转换为枚举类型值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59322222/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com