Информация о типе не поддерживается для перечислений, где присваиваются конкретные порядковые значения, в результате чего члены перечисления имеют порядковые значения, отличающиеся от тех, которые обычно назначаются компилятором.
Если конкретные значения необходимы или желательны, «неиспользуемые» элементы перечисления должны быть вставлены для «дополнения» перечисления по мере необходимости. например (дополнительный отступ только для выделения):
type
TMyEnum = (
meNOTUSED1, {= 0}
meFirstValue, {= 1}
meSecondValue,
meThirdValue
);
Затем можно использовать поддиапазон для «фильтрации» неиспользованного начального значения:
TValidMyEnum = meFirstValue..meThirdValue;
Хотя тогда вы, возможно, захотите рассмотреть вопрос о переименовании исходного типа перечисления, чтобы ваш тип поддиапазона мог использоваться в вашем проекте.
Поддиапазон недостаточен, если перечисление содержит «пробелы»:
type
TMyEnum = (
meNOTUSED1, {= 0}
meFirstValue, {= 1}
meSecondValue,
meThirdValue,
meNOTUSED2,
meFinalValue {= 5}
);
В этом случае не существует простого способа расширить проверку диапазона времени компиляции, чтобы исключить неиспользуемые элементы, но пара типов наборов упростит реализацию любых необходимых проверок времени выполнения проверок:
type
TMyEnums = set of TMyEnum;
const
meNOTUSED = [meUNUSED1, meUNUSED2]; // .. etc as required
meValidValues = [Low(TMyEnum)..High(TMyEnum)] - meNOTUSED;
if NOT (aValue in meValidValues) then
// etc