Delphi检查类型声明中的变量值

时间:2010-11-26 16:02:12

标签: delphi types typechecking

如何确定变量的值是否在“类型声明”的范围内。 实施例

Type
  TManagerType = (mtBMGR, mtAMGR, mtHOOT);

...

var
  ManagerType: TManagerType;

....


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

谢谢,彼得。

3 个答案:

答案 0 :(得分:5)

InRange: Boolean;
ManagerType: TManagerType;
...
InRange := ManagerType in [Low(TManagerType)..High(TManagerType)];

正如Nickolay O.所说 - 上面的布尔表达直接对应于:

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

编译器不会执行基于单个子范围检查成员资格的立即设置的优化。因此,[成熟]优化的代码将不那么优雅。

答案 1 :(得分:3)

嗯,TManagerType类型的变量必须在该范围内,因为这是Pascal枚举类型的工作方式。唯一不可能的方法就是如果你在编译器的后面做了一些顽皮的事情。

另一种写这个的方法是:

InRange(ord(ManagerType), ord(low(ManagerType)), ord(high(ManagerType)))

答案 2 :(得分:-1)

你应该通过以下方式检查: 如果mType&gt;高(TManagerType)然后......