在Delphi的case
语句中使用类型常量的最优雅(或最不丑陋)方式是什么?
也就是说,假设您需要在
中声明类型化常量const
MY_CONST: cardinal = $12345678;
...
然后Delphi编译器不接受
case MyExpression of
MY_CONST: { Do Something };
...
end;
但你需要写
case MyExpression of
$12345678: { Do Something };
...
end;
容易出错,难以更新,也不优雅。
是否有任何技巧可以使编译器插入常量的值(最好通过检查源代码中const
下的常量值,但可以通过在运行时查找值来查找值) )?我们在此假设您不会在运行时更改“常量”的值。
答案 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语句中使用,期望常数。