如何确定变量的值是否在“类型声明”的范围内。 实施例
Type
TManagerType = (mtBMGR, mtAMGR, mtHOOT);
...
var
ManagerType: TManagerType;
....
procedure DoSomething;
begin
if (ManagerType in TManagerType) then
DoSomething
else
DisplayErrorMessage;
end;
谢谢,彼得。
答案 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)然后......