我希望有人能在这里看到什么地方出了问题。在Xe2中,我有一个要排序的通用TObjectList。我有一个TObjectList,我正在另一个地方进行排序,因此我在旧代码上建模了新代码。看起来都很正确:ComparePosControl是一个非OOPS函数; Rpt是表单的嵌套方法,TPosCtrl是一个简单的类。

function ComparePosControl(L, R: TPosCtrl): integer;
begin
  result := L.SortNum - R.SortNum;
end;


procedure Rpt(RParent: TWinControl);
begin
  PosCtrls := TObjectList<TPosCtrl>.Create;
  try
    AddPosCtrls(RParent);
    PosCtrls.Sort(TComparer<TPosCtrl>.Construct(ComparePosControl));


但我不断收到此错误:

[DCC错误] Rputils.pas(1552):E2010不兼容的类型:“ System.Generics.Defaults.TComparison”和“ Procedure”

有任何想法吗?

TIA

标记

最佳答案

稍微更改功能以匹配原型(添加const修饰符):

function ComparePosControl(const L, R: TPosCtrl): integer;


您还可以使用匿名函数:

PosCtrls.Sort(TComparer<TPosCtrl>.Construct(
  function (const L, R: TPosCtrl): integer;
  begin
    result := L.SortNum - R.SortNum;
  end;
  ));

关于delphi - 在Delphi Xe2中使用通用排序出现错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22623469/

10-09 04:12