使用`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关键字来检查一个项目是否在常量数组中时,我得到以下编译错误:
常数定义如下: 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 的文档说:
因此,即使您可以具有任何值的枚举,则[a,b,c]语句中的if xx将在此失败,因为集合不能容纳大于255的值. 改用case语句: case xx of a,c : // Make something end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |