案例语句中的Delphi类型常量

时间:2010-06-08 16:55:36

标签: delphi case-statement

在Delphi的case语句中使用类型常量的最优雅(或最不丑陋)方式是什么?

也就是说,假设您需要在

中声明类型化常量
const
  MY_CONST: cardinal = $12345678;
  ...

然后Delphi编译器不接受

case MyExpression of
  MY_CONST: { Do Something };
  ...
end;

但你需要写

case MyExpression of
  $12345678: { Do Something };
  ...
end;

容易出错,难以更新,也不优雅。

是否有任何技巧可以使编译器插入常量的值(最好通过检查源代码中const下的常量值,但可以通过在运行时查找值来查找值) )?我们在此假设您不会在运行时更改“常量”的值。

3 个答案:

答案 0 :(得分:12)

根据为什么您需要输入常量,您可以尝试类似

的内容
const
  MY_REAL_CONST = Cardinal($12345678);
  MY_CONST: Cardinal = MY_REAL_CONST;

case MyExpression of
  MY_REAL_CONST: { Do Something };
  ...
end;

答案 1 :(得分:4)

如果你不改变常量的值,那么你不需要它是一个类型常量。编译器可以获取您声明的数字,并将其正确放入您为其分配的任何变量或参数中。类型常量是一种破解,它们实际上是作为变量实现的,因此编译器不能将它们用作需要在编译时修复其值的常量。

答案 2 :(得分:0)

类型常量不能在case语句中使用,因为类型化常量实际上更像是静态变量(并且可赋值...),因此不能在case语句中使用,期望常数。