我有一堆重载方法,它们都获取某种类型的数组作为参数,并从该数组返回一个随机值:
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;
etc.
如何使用泛型为任何类型的数组创建单一方法?像这样的东西(不能在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]);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)