You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

排序含TPair<Word,自定义记录>的TArray遇编译错误E2018

解决TArray<TPair<>>排序时的E2018编译错误

问题核心在于TArray.Sort是静态类方法,并非数组实例的成员方法,你直接调用FailureArray.Sort(...)的写法不符合Delphi语法规范,这是编译器抛出E2018错误的根本原因。

修正后的代码

type
  TFailureEntry = TPair<System.Word, TMyFailureRecord>;

procedure TMyClass.GetFailureAbbreviations;
var
  FailureArray: TArray<TFailureEntry>;
begin
  // 从字典导出数组内容
  FailureArray := FFailureDictionary.ToArray;

  // 调用静态类方法TArray.Sort,传入目标数组和比较器
  TArray.Sort<TFailureEntry>(FailureArray,
    TComparer<TFailureEntry>.Construct(
      function(const Left, Right: TFailureEntry): Integer
      begin
        Result := Left.Key - Right.Key;
      end
    )
  );
end;

补充说明

  • 可以省略单独声明Comparison变量,直接将匿名函数传入TComparer.Construct,简化代码结构。
  • 当前仅基于TPair.Key的比较逻辑是可行的,只要TMyFailureRecord的定义不干涉排序需求即可。
  • 确保代码已引用System.Generics.Collections单元(TArray、TComparer等核心类型均来自该单元)。

内容的提问来源于stack exchange,提问作者Markus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 03:15:48