问题 如何在delphi中排除用作数组索引的枚举类型的第一个元素?


我想排除此枚举类型的第一个值

type
  TEnum = (val0, val1, val2, val3, val4);

为了制作这个数组

TBValues: array [low(TEnum)..High(TEnum)] of boolean;

仅包含最后的n-1个值(在本例中为n = 5)。

我试过这个:

TBValues: array [low(TEnum)+1..High(TEnum)] of boolean; 

但我想在这种情况下不允许进行算术运算,因为我收到了这个编译错误

E2010不兼容类型:'Int64'和'TEnum'

这个怎么做?


1097
2017-11-14 16:12


起源

奇怪的编译器消息。 TBValues = array [Ord(Low(TEnum)) ..High(TEnum)] of Boolean; 这也抱怨了Int64不兼容。 - Sertac Akyuz
@SertacAkyuz我脑子里有同样的问题,但我找到了解决方案。这就是文档中关于Ord(X)的内容: X是Delphi序数型表达式。结果是X的顺序位置; 它的类型是可以容纳X类型的所有值的最小标准整数类型。 因此错误消息。 - Nasreddine Abdelillah Galfout


答案:


显而易见的是:

TBValues: array [val1..val4] of boolean;

如果你想避免实际的枚举名称,你可以这样写:

TBValues: array [Succ(low(TEnum))..High(TEnum)] of boolean;

了解更多信息:


14
2017-11-14 16:17



我真的很喜欢你的第二个选择。对我来说,重点是避免使用枚举名称 - Dsm