【发布时间】:2014-07-15 09:24:01
【问题描述】:
我目前有一个与属性一起使用的选项管理,它使用所有相同的 getter/setter 方法,但带有一个索引。
这适用于 Ints 和 Bools,但我想让它也适用于枚举。
TIntegerOptions = (kInt1, kInt2, kInt3);
class property Integer1: Integer index kInt1 read GetOptionsValueInt write SetOptionsValueInt;
class property Integer2: Integer index kInt2 read GetOptionsValueInt write SetOptionsValueInt;
class property Integer3: Integer index kInt3 read GetOptionsValueInt write SetOptionsWertInt;
FOptionsListInt: array[TIntegerOptions] of IniIntObject; // Objects contain Inifile read&save functionalities
...
class function GetOptionsValueInt(const aOption: TIntegerOptions) : Integer
begin
Result := Ord(FOptionsListInt[aOption].GetValue());
end;
class procedure SetOptionsValueInt(const aOption: TIntegerOptions; const aValue: Integer);
begin
FOptionslistInt[aOption].ChangeTo(aValue);
end;
到目前为止这是有效的,现在我的问题是:
TEnumOptions = (kEnum1, kEnum2, kEnum3);
TEnum1 = (e1o1, e1o2, e1o3);
TEnum2 = (e2o1, e2o2, e2o3);
TEnum3 = (e3o1, e3o2, e3o3);
// these props fail because my functions return / excpect Integers, not the matching Enums
class property Enum1: TEnum1 index kEnum1 read GetOptionsValueInt write SetOptionsValueEnum;
class property Enum2: TEnum2 index kEnum2 read GetOptionsValueInt write SetOptionsValueEnum;
class property Enum3: TEnum3 index kEnum3 read GetOptionsValueInt write SetOptionsValueEnum;
FOptionsListEnum: array[TEnumOptions] of IniIntObject; // Objects contain Inifile read&save functionalities
我在代码中标记了问题。我可以以某种方式将 getter/setter 返回的整数值转换为每个属性的匹配枚举吗?
对于那些阅读旧问题的人:
我决定对枚举使用相同的 getter/setter,因为最终它们也被保存为整数。如果我需要以某种方式在 getter 中进行转换,我会再次添加它们,但我希望在属性声明中找到解决方案。
【问题讨论】:
标签: delphi casting enums delphi-xe5