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

Ian*_*oyd 3 delphi enums pascal range

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

type
   TReceiptCode = 'A'..'F';
Run Code Online (Sandbox Code Playgroud)

这不是:

type
   TReceiptCode = ' ','A'..'F', 'R';
Run Code Online (Sandbox Code Playgroud)

也没有

type
    TReceiptCode = ' ','A','B','C','D','E','F','R';
Run Code Online (Sandbox Code Playgroud)

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

Mas*_*ler 5

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


Des*_*her 5

你能用一套吗?

TSomeCharSet= Set of Char;

SomeChars: TSomeCharSet = [' ','A','B','C','D','E','F','R'];
Run Code Online (Sandbox Code Playgroud)

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

那么你剩下的就是创建TNonContigousCharRange自己使用Set或数组作为限制"范围"并在超出范围或使用SetReceiptCode过程执行类似操作时引发异常.