3

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

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

这不会:

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

也没有

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

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

4

3 回答 3

5

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

于 2009-10-09T15:07:27.973 回答
5

你能用一套来代替吗?

TSomeCharSet= Set of Char;

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

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

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

于 2009-10-09T15:31:01.340 回答
3

对于所有先前的答案,我会简单地补充一点,线索是类型的名称:子范围

简单地说,一个范围有一个下限和一个上限。您描述的是一个集合(或一个子集),而不是一个子范围,因此您当然不能将其表示一个子范围。

于 2009-10-10T02:16:38.907 回答