gpt4 book ai didi

Delphi:如何使用 RTTI 知道哪个索引属性具有字符串索引

转载 作者:行者123 更新时间:2023-12-03 15:51:26 25 4
gpt4 key购买 nike

基于如下代码:

TListWrapper = class
strict private
FList: TStringList;
function GetItem(index: Integer): TObject; overload;
function GetItem(index: string): TObject; overload;
public
property Items[index: Integer]: TObject read GetItem; default;
property Items[index: string]: TObject read GetItem; default;
end;

我想编写一段代码,使用 RTTI 获取字符串索引属性的值。像这样的事情:

var
MyList: TListWrapper;
InstanceType: TRttiInstanceType;
IndexedProperty: TRttiIndexedProperty;

begin
MyList:=TListWrapper.Create;

LContext:=TRttiContext.Create;
InstanceType:=LContext.GetType(MyList.ClassType) as TRttiInstanceType;
for IndexedProperty in InstanceType.GetIndexedProperties do
if IndexedProperty.Name.ToLower = 'items' then
begin
//There are two indexed properties with name 'items'
end;
LContext.Free;
MyList.Free;
end;

问题:我如何知道哪个索引属性具有字符串索引,以便我可以获得这样的值?

IndexedProperty.GetValue(MyList, ['some_string_index']);

注意:我使用的是 Delphi 10.2.3(东京)

最佳答案

您应该能够使用读取方法参数。像这样的事情:

readingMethod := IndexedProperty.ReadMethod;
readMethodParameters := readingMethod.GetParameters;
if readMethodParameters[0].ParamType.TypeKind = tkUString then
// We have the string version

您显然应该检查 readMethod 是否已分配以及参数数量是否大于零等。

来自雷米:

在本例中,字符串类型为 tkUString (UnicodeString),自 Delphi 2009 以来一直如此。

关于Delphi:如何使用 RTTI 知道哪个索引属性具有字符串索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51903303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com