我在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;