Delphi Проверьте значение переменной в объявлении типа - PullRequest
3 голосов
/ 26 ноября 2010

Как определить, находится ли значение переменной в пределах диапазона объявления типа. Ex.

Type
  TManagerType = (mtBMGR, mtAMGR, mtHOOT);

...

var
  ManagerType: TManagerType;

....


procedure DoSomething;
begin
  if (ManagerType in TManagerType) then
    DoSomething
  else
    DisplayErrorMessage;
end;

Спасибо, Питер.

Ответы [ 3 ]

5 голосов
/ 26 ноября 2010
InRange: Boolean;
ManagerType: TManagerType;
...
InRange := ManagerType in [Low(TManagerType)..High(TManagerType)];

Как отметил Николай О. - в то время как логическое выражение выше непосредственно соответствует:

(Low(TManagerType) <= ManagerType) and (ManagerType <= High(TManagerType))

компилятор не не выполняет оптимизацию при проверке членства по непосредственному набору на основе одного поддиапазона. Поэтому оптимизированный код будет менее элегантным.

3 голосов
/ 26 ноября 2010

Ну, переменная типа TManagerType должна находиться в этом диапазоне, поскольку так работают перечисляемые типы Pascal.Единственный способ, которым это не могло быть, - это если вы сделали что-то непослушное за спиной компилятора.

Другой способ написать это было бы:

0 голосов
/ 26 ноября 2010

Вы должны проверить это через: если mType> High (TManagerType), то ...

...