Delphi: Как иметь несмежный тип перечисления поддиапазонов? - PullRequest
3 голосов
/ 09 октября 2009

Пока работает следующее объявление перечисления поддиапазона:

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

Это не:

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

И не

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

Как я могу объявить тип поддиапазона с несмежными значениями?

Ответы [ 3 ]

5 голосов
/ 09 октября 2009

Не могли бы вы использовать вместо этого набор?

TSomeCharSet= Set of Char;

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

Может быть ситуация с бабушкой и яйцом, но я не уверен, для чего вы тогда используете :) ...

Итак, все, что вам остается, - это создать TNonContigousCharRange самостоятельно, используя Set или массив в качестве ограничивающего «Range» и вызывая исключение, когда он выходит за пределы диапазона или используя процедуру SetReceiptCode, чтобы сделать подобное.

5 голосов
/ 09 октября 2009

К сожалению, я не думаю, что есть способ сделать это. Вы можете объявить (новое) несмежное перечисление или поддиапазон существующего типа, но не оба.

3 голосов
/ 10 октября 2009

К всем предыдущим ответам я бы просто добавил, что подсказка находится в названии типа: sub range

Проще говоря, диапазон имеет нижнюю и верхнюю границы. Вы описываете набор (или подмножество), а не поддиапазон, поэтому, конечно, вы не можете выразить его как поддиапазон.

...