【发布时间】:2016-02-06 13:40:00
【问题描述】:
我已经实现了 Generics.Defaults.TComparer 来对类型化的 TList 进行排序。但是调用 Sort 方法时,会抛出异常“Stack overflow at...”
为什么会出现堆栈溢出错误?
// Declarations
TOrder = record
ID: Integer;
OrderDate: TDate;
end;
POrder = ^TOrder;
FOrderList: TList<POrder>;
TComparer_OrderDate = class(TComparer<POrder>)
public
function Compare(const a, b: POrder): Integer; override;
end;
function TComparer_OrderDate.Compare(const a, b: POrder): Integer;
begin
Result := 0;
if (a^.OrderDate> b^.OrderDate) then
Result := 1
else
Result := -1;
end;
// This code inside a button OnClick event:
FOrderList := TList<POrder>.Create;
FComparer_OrderDate := TComparer_OrderDate.Create;
FOrderList.Sort(FComparer_OrderDate); // <--- 'stack overflow' error.
【问题讨论】:
-
好的。我使用了“结果 := TComparer
.Default.Compare(a^.ID, b^.ID);”它似乎工作。这是为什么呢? -
你为什么在 Q 中按日期排序,而在评论中按 ID 排序?
标签: delphi delphi-10-seattle tlist