gpt4 book ai didi

list - 如何知道对象是否为通用列表

转载 作者:行者123 更新时间:2023-12-03 19:37:32 25 4
gpt4 key购买 nike

我怎么知道一个对象(TObject)是否是通用的TList<T>

我得到的对象可以是TList<TWhateverObject>或只是TWhateverObject

也可以是TList<THelloWorld>

在我的代码中,我不会使用此代码:

  If (oObject is TList<TWhateverObject>) or
(oObject is TList<THelloWorld>)

then begin
oObject.Free;
end;


但是,如果可能的话,更像这样:

  If (oObject.IsList)
then begin
oObject.Free;
end;


如果在对象中存在属性add,clear,item,count,则Delphi中是否有为此功能,或者我必须为TObject创建一个助手(IsList),以便在RTTI中进行搜索。

最佳答案

不幸的是,您不能在这里使用is运算符,因为您正在检查该类是否是泛型类型的特殊化(在您的情况下为TList<T>)。

由于Delphi没有开放泛型类型的概念(有关.Net,请参见this question),因此它并不是那么简单。

但是,您可以使用一些技巧来分析typeinfo / classname。因此,为了检查您的实例是否为TList<something>,您只需检查类名是否匹配TList<*>或它是否继承自该类。

在Spring4D中,我们需要多次,因此我将此功能添加到了RTTI帮助器中。

那里看起来像这样(将Spring.Reflection.pas添加到用途中):

TType.GetType(oObject).IsGenericTypeOf('TList<>');

关于list - 如何知道对象是否为通用列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43778960/

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