Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi中TObjectList祖先到泛型集合的转换_Delphi_List_Generics_Delphi 2009 - Fatal编程技术网

Delphi中TObjectList祖先到泛型集合的转换

Delphi中TObjectList祖先到泛型集合的转换,delphi,list,generics,delphi-2009,Delphi,List,Generics,Delphi 2009,我有课 TMyAwesomeList = class(TObjectList) 哪一个有效 TAwesomeItem = class(TPersistent) 其中TAwesomeItem对于 TAwesomeItem1 = class(TAwesomeItem) TAwesomeItem2 = class(TAwesomeItem) TAwesomeItem3 = class(TAwesomeItem) TAwesomeItem3a = class(TAwesomeItem3)

我有课

TMyAwesomeList = class(TObjectList)
哪一个有效

 TAwesomeItem = class(TPersistent)
其中TAwesomeItem对于

 TAwesomeItem1 = class(TAwesomeItem)
 TAwesomeItem2 = class(TAwesomeItem)
 TAwesomeItem3 = class(TAwesomeItem)
 TAwesomeItem3a = class(TAwesomeItem3)
以此类推(大约30个子类,其中有一些中间抽象类),它们完成了我在一年前实现的一些对象关系建模,期望最终从Delphi7转换到2009(很快会转换到XE2)

代码在Delphi2009中仍然有效,但我想做一个

 for AwesomeItem3a in AwesomeList do
 begin     
    //something awesome
 end;

我不知道如何重新构造TMyAwesomeList(或添加几个子类)来实现这一点

根据您的评论,您似乎可以直接使用
TObjectList

var
  MyAwesomeList1: TObjectList<TMyAwesomeItem1>;
  MyAwesomeItem1: TMyAwesomeItem1;
begin
  MyAwesomeList1 := TObjectList<TMyAwesomeItem1>.Create;
  try
    // populate the list...

    for MyAwesomeItem1 in MyAwesomeList1 do
      ...
  finally
    MyAwesomeList1.Free;
  end;
end;

清单是否同质,即所有项目均为同一混凝土类型?如果是这样,您可以只使用
类型TMyAwesomeList1=TObjectList;TMyAwesomeList2=对象列表等。否则,您需要指定您的<代码>对。。。在
循环中工作。原始TAwesomeList中没有太多内容,只有4个构造函数使用正确的TAwesomeItem类型填充列表,并重写了GetItem/SetItem方法,我可以用泛型消除这些方法。是的,我想它们可能都是同一类型的,最初我在编程时没有考虑到这一点,但从来没有这样使用过。这可能是对的,我唯一需要做的就是用
//填充列表…
,替换我使用的构造函数,我想我只是希望有一种神奇的方法来实现它,谢谢!关于构造器,现在情况已经改变了:对于每个项类型,您都有一个单独的列表类型。可能会提出一个通用项构造函数作为列表的方法。这取决于你的代码。
type
  TMyAwesomeList1 = TObjectList<TMyAwesomeItem1>;
  TMyAwesomeList2 = TObjectList<TMyAwesomeItem2>;
  // etc.