delphi - 关于加入 TObjectlists

标签 delphi generics delphi-2010 concatenation tobjectlist

我认为我需要朝正确的方向插入:

我有两个相同数据类型的 Tobjectlist,我想将它们连接到一个新列表中,其中 list1 将被复制(未修改),然后是 list2(相反)

type
  TMyListType = TobjectList<MyClass>

var
  list1, list2, resList : TMyListtype

begin
  FillListWithObjects(list1);
  FillListWithOtherObjects(list2);

  list2.reverse

  //Now, I tried to use resList.Assign(list1, list2, laOr), 
  //but Tobjectlist has no Assign-Method. I would rather not want to 
  //iterate over all objects in my lists to fill the resList
end;

delphi有没有内置函数可以将两个Tobjectlist合并为一个?

最佳答案

使用TObjectList.AddRange()并设置OwnsObjectsFalse以避免重复释放 LRes 中的项目.

var
  L1, L2, LRes: TObjectList<TPerson>;
  Item: TPerson;

{...}

L1 := TObjectList<TPerson>.Create();
try
  L2 := TObjectList<TPerson>.Create();
  try

    LRes := TObjectList<TPerson>.Create();
    try
      L1.Add(TPerson.Create('aa', 'AA'));
      L1.Add(TPerson.Create('bb', 'BB'));

      L2.Add(TPerson.Create('xx', 'XX'));
      L2.Add(TPerson.Create('yy', 'YY'));

      L2.Reverse;

      LRes.OwnsObjects := False;
      LRes.AddRange(L1);
      LRes.AddRange(L2);

      for Item in LRes do
      begin
        OutputWriteLine(Item.FirstName + ' ' + Item.LastName);
      end;

    finally
      LRes.Free;
    end;

  finally
    L2.Free;
  end;

finally
  L1.Free;
end;

关于delphi - 关于加入 TObjectlists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2847863/

相关文章:

multithreading - Delphi WebBroker/ISAPI 与线程

delphi - 有什么方法可以在 Delphi 7 中折叠代码?

c# - 要提供哪种参数类型(即 IEnumerable 且具有 Count)?

delphi - 是否可以在设计时直观地设计自定义组件?

Delphi 2010 如何设置IDE打开项目对话框的初始文件夹

delphi - 在 Delphi 2010 或更高版本中获取文件的大小?

delphi - WinInet HttpQueryInfo 可以返回原始字节吗? (带有 unicode 字符的 HTTP header )

c# - 为什么不能在泛型中要求运算符重载

Java : inherits a generic type

Delphi 2010 编译器关于抽象类实例化的警告应该是一个编译器错误