如何使用泛型来替代一堆使用不同类型的重载方法?

How to use generics as a replacement for a bunch of overloaded methods working with different types?

我有一堆重载方法,所有方法都获取某种类型的数组作为参数,return 来自该数组的随机值:

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 的方法(奇怪的限制,以我的拙见)。请注意 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]);