Delphi:如何使用非连续的子范围枚举类型?

时间:2009-10-09 15:00:39

标签: delphi enums range pascal

以下子范围枚举声明有效:

type
   TReceiptCode = 'A'..'F';

这不是:

type
   TReceiptCode = ' ','A'..'F', 'R';

也不是

type
    TReceiptCode = ' ','A','B','C','D','E','F','R';

如何声明具有非连续值的子范围类型?

3 个答案:

答案 0 :(得分:5)

不幸的是,我认为没有办法做到这一点。您可以声明(新)非连续枚举或现有类型的子范围,但不能同时声明两者。

答案 1 :(得分:5)

您可以使用套装吗?

TSomeCharSet= Set of Char;

SomeChars: TSomeCharSet = [' ','A','B','C','D','E','F','R'];

可能是奶奶和鸡蛋的情况,但我不确定你在用什么:) ...

那么你剩下的就是创建TNonContigousCharRange,使用Set或数组作为限制“Range”,并在超出范围或使用SetReceiptCode程序执行类似操作时引发异常。

答案 2 :(得分:3)

对于之前的所有答案,我只想添加线索的类型名称:sub range

简单地说,范围具有下限和上限。你描述的是一个(或一个子集),而不是一个子范围,所以当然你不能把它作为作为一个子范围。