delphi - 将非类函数添加到通用 TArray 类
问题描述
在System.Generics.Collections
中,该TArray
类型仅具有类函数。
例如:
class procedure Sort<T>(var Values: array of T); overload; static;
这意味着唯一可接受的语法如下:
var
Arr : TArray<integer>;
begin
SetLength(Arr, 2);
Arr[0] := 5;
Arr[1] := 3;
TArray.Sort<integer>(Arr);
end;
我想定义一个对象的函数,以便使用以下语法对通用数组的值进行排序:
var
Arr : TArray<integer>;
begin
SetLength(Arr, 2);
Arr[0] := 5;
Arr[1] := 3;
Arr.Sort();
end;
解决方案
您可以为非泛型动态数组或完全专用的泛型动态数组定义助手。例如,您可以编写:
type
TMyArray1 = array of Integer;
TMyArray2 = TArray<Integer>;
TMyArrayHelper1 = record helper for TMyArray1
end;
TMyArrayHelper2 = record helper for TMyArray2
end;
TMyArrayHelper3 = record helper for TArray<Integer>
end;
这允许您将方法添加到此类数组的范围内。
所以你可以写
type
TIntegerArrayHelper = record helper for TArray<Integer>
procedure Sort;
end;
procedure TIntegerArrayHelper.Sort;
begin
TArray.Sort<Integer>(Self);
end;
但是,你不能做的是写:
TMyArrayHelper<T> = record helper for TArray<T>
end;
编译器根本不支持通用助手。
在我看来,这些都不值得,只需调用:
TArray.Sort<T>()
直接地。添加一个记录助手,并且必须为您希望支持的每种元素类型制作一个,在我看来,这似乎是一种无法证明回报的成本。
推荐阅读
- javascript - 我怎样才能找到我点击页面(Javascript)的任何东西的相对xpath
- r - 如何在R中用四舍五入的值从文本中查找和替换数字?
- android - 无法将 3d 模型从 firebase 存储下载并实例化到统一
- android - onRestoreInstanceState 的使用
- spring-boot - 登录后 Spring Boot 转发到预期页面
- node.js - 为什么授权标头不通过重定向?
- c# - 查询字符串参数压缩 Asp Net Core
- angular - Angular 中的管道和地图
- javascript - ffmpeg 仅将我的 41.25% 的图像转换为视频
- sql - SQL查询/函数从字符串中提取第一个数字?不仅仅是第一个数字,而是整个数字,直到我们达到非数字值