使用`in`关键字导致“E1012常数表达式违反子范围”在Delphi中

我在Delphi代码中遇到了一些非常不寻常的行为.当使用in关键字来检查一个项目是否在常量数组中时,我得到以下编译错误

E1012 Constant expression violates subrange bounds

常数定义如下:

type TSomeEnum = (seFoo = 1000,seBar = 2000,seBoo = 3000,seFar = 4000,seFooBar = 5000,seBooFar = 6000,seLow = 1000,seHigh = 6000,seCount = 6);

失败的行如下:

if someObj.someProperty in [seFoo,seFar,seFooBar] then
...

虽然我了解another question posted here中出现错误的原因,但是在使用变量的编译时没有对整数数组进行检查的范围,似乎很奇怪,我遇到与常数数组相同的问题界限.

现在,我用一个(大得多)的语句替换了这个行,或者是子句.不过,这显然不是很理想.任何人都可以看出为什么我得到这个问题吗?

解决方法

关于 Sets的文档说:

The base type can have no more than 256 possible values,and their ordinalities must fall between 0 and 255.

因此,即使您可以具有任何值的枚举,则[a,b,c]语句中的if xx将在此失败,因为集合不能容纳大于255的值.

改用case语句:

case xx of
  a,c : // Make something 

end;

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...