GetRandomValueFromArray

GetRandomValueFromArray

我有一堆重载的方法,所有方法都获得某种类型的数组作为参数,并从该数组返回一个随机值:

function GetRandomValueFromArray(Arr: array of String): String; overload;
begin
     Result := Arr[Low(Arr) + Random(High(Arr) + 1)];
end;

function GetRandomValueFromArray(Arr: array of Integer): Integer; overload;
begin
     Result := Arr[Low(Arr) + Random(High(Arr) + 1)];
end;


等等

如何使用泛型为任何类型的数组创建单个方法?这样的事情(不能在Delphi XE7中编译):

function GetRandomValueFromArray(Arr: TArray<T>): <T>;


当我阅读有关泛型的大多数问题时,请多加赞赏,对我来说仍然不清楚,这是否可能?

最佳答案

要使用泛型函数,您必须将其转换为类的方法(以我的愚见,这是奇怪的限制)。请注意,class函数不需要创建TDummy的实例

TDummy = class
  class function GetRandomValueFromArray<T>(const Arr: TArray<T>): T;
end;

class function TDummy.GetRandomValueFromArray<T>(const Arr: TArray<T>): T;
begin
  Result := Arr[Low(Arr) + Random(High(Arr) + 1)];
end;

intValue := TDummy.GetRandomValueFromArray<Integer>([1,3,5]);

10-05 22:28