我正在尝试编写一个通用函数,它接受匹配的参数类型。
在普通参数的简单情况下,Delphi可以正确推断出类型参数。
例如:
type
TFoo = class
function Pair<T>(e1, e2: T): TList<T>;
end;
使用aFoo.Pair(1, 2);
调用是完全正常的,但是当我将参数签名更改为泛型类型时
type
TFoo = class
function InsertInto<T>(aList: TList<T>; aVal: T): TList<T>;
end;
尝试调用它:
aFoo.InsertInto(TList<String>.Create, 'bar');
然后编译器报错:
E2010 不兼容的类型:'Generics.Collections.TList<uTest.TFoo.InsertInto.T>' 和 'Generics.Collections.TList<System.String>'
我是否有办法编写这个(或类似的)方法,以便客户端不必指定类型参数?
aFoo.InsertInto<String>(TList<String>.Create, 'bar');
uTest.TFoo.InsertInto.T
等同于System.String
——如果确实已经推断出了T
。 - Rob Kennedy