Arrays
可以使用用户定义的枚举类型进行索引。例如:
type
TIndexValue = (ZERO = 0, ONE, TWO, THREE, FOUR);
var
MyArray: array[Low(TIndexValue) .. High(TIndexValue)] of String;
然后可以使用TIndexValue
值作为索引来引用此数组中的元素:
MyArray[ZERO] := 'abc';
我正在尝试使用TStringList
.
一个简单的解决方案是在引用时将每个索引值转换为一个Integer
类型:
MyStringList[Integer(ZERO)] := 'abc';
另一个解决方案(隐藏所有转换)是创建一个子类TStringList
并将所有转换推迟到该子类的访问继承Strings
属性的子例程:
type
TIndexValue = (ZERO = 0, ONE, TWO, THREE, FOUR);
type
TEIStringList = class(TStringList)
private
function GetString(ItemIndex: TIndexValue): String;
procedure SetString(ItemIndex: TIndexValue; ItemValue: String);
public
property Strings[ItemIndex: TIndexValue]: String
read GetString write SetString; default;
end;
function TEIStringList.GetString(ItemIndex: TIndexValue): String;
begin
Result := inherited Strings[Integer(ItemIndex)];
end;
procedure TEIStringList.SetString(ItemIndex: TIndexValue; ItemValue: String);
begin
inherited Strings[Integer(ItemIndex)] := ItemValue;
end;
这适用于使用枚举类型的单个实现TIndexValue
。
但是,我想TStringList
为由不同枚举类型索引的几个不同对象重新使用相同的逻辑或子类,而不必TStringList
为每个可能的枚举类型定义子类。
这样的事情可能吗?我怀疑我可能不得不依赖 Delphi 的泛型,但我很想知道有更简单的方法可以实现这一点。