加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 04:31:00 所属栏目:大数据 来源:网络整理
导读:我在Delphi代码中遇到了一些非常不寻常的行为.当使用in关键字来检查一个项目是否在常量数组中时,我得到以下编译错误: E1012 Constant expression violates subrange bounds 常数定义如下: type TSomeEnum = (seFoo = 1000,seBar = 2000,seBoo = 3000,seFar
我在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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读