排序含TPair<Word,自定义记录>的TArray遇编译错误E2018
解决TArray<TPair<>>排序时的E2018编译错误
问题核心在于TArrayFailureArray.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
相关产品推荐
相关产品推荐

