我有一个要用枚举集注释的类。
我定义了自定义属性类以及所有内容。我想在资源文件中的其他位置定义枚举集,然后仅将注释与此预定义的枚举集一起应用。但是,编译器抱怨它期望一个常量表达式(尽管枚举集是在const块中定义的)
然后,如果我传入一个硬编码的枚举集,它不会抱怨。
为什么不编译?我如何在另一个资源文件中定义枚举集并在批注中使用它们,而不必在批注中对其进行硬编码?
// resources.pas
interface
type
TMyEnum = (val1, val2, val3);
TEnumSet = set of TMyEnum;
const enumSet1 : TEnumSet = [val1, val2];
// Class.pas
interface
uses resources;
type
TMyAnnotation = class(TCustomAttribute)
begin
public
constructor Create(const aSet : TEnumSet);
end;
[TMyAnnotation(enumSet1)] // Fail, Constant expression expected here!
TMyClass = class(TObject)
begin
end;
[TMyAnnotation([val1, val2])] // Compiles
TMyClass = class(TObject)
begin
end;
最佳答案
根据语言的规则,类型化常量不是constant expression,必须将属性构造函数传递给constant expressions。
您已经声明了类型常量。改用常量表达式:
const enumSet1 = [val1, val2];