我希望有人能在这里看到什么地方出了问题。在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/