7

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

也就是说,假设对于这个问题,您需要声明一个类型化常量,如

const
  MY_CONST: cardinal = $12345678;
  ...

那么Delphi编译器将不接受

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

但你需要写

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

这容易出错,难以更新,而且不优雅。

有什么技巧可以让编译器插入常量的值(最好通过const在源代码中检查常量的值,但也可以在运行时查找值)?我们在这里假设您不会在运行时更改“常量”的值。

4

3 回答 3

12

根据您需要输入常量的原因,您可以尝试类似

const
  MY_REAL_CONST = Cardinal($12345678);
  MY_CONST: Cardinal = MY_REAL_CONST;

case MyExpression of
  MY_REAL_CONST: { Do Something };
  ...
end;
于 2010-06-08T17:44:44.177 回答
4

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

于 2010-06-08T17:04:43.077 回答
0

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

于 2010-06-08T17:30:58.863 回答