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

前端之家收集整理的这篇文章主要介绍了使用`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;
原文链接:https://www.f2er.com/delphi/101320.html

猜你在找的Delphi相关文章