考虑下面的代码
procedure TMyClass.SetParam<T>(Name: string; Value: T);
begin
if (TypeInfo(T) = TypeInfo(string)) then
begin
FHashTable.AddString(Name, (Value as string));
end
else if (TypeInfo(T) = TypeInfo(Integer)) then
begin
FHashTable.AddInteger(Name, (Value as Integer));
end
......
我想要一个通用过程,它获取类型 T 的通用值,并根据 T 的实际类型将该值插入到哈希表中。
编译器不会让我做这个转换,也不会让我做像 Integer(Value) 这样的事情。
有人可以解释一下我应该如何实现上述内容吗?
尝试这样的事情:
procedure TMyClass.SetParam<T>(Name: string; Value: T);
begin
if (TypeInfo(T) = TypeInfo(string)) then
begin
FHashTable.AddString(Name, PString(@Value)^);
end
else if (TypeInfo(T) = TypeInfo(Integer)) then
begin
FHashTable.AddInteger(Name, PInteger(@Value)^);
end
......
Or this:
uses
System.Rtti;
procedure TMyClass.SetParam<T>(Name: string; Value: T);
var
LValue: TValue;
begin
LValue := TValue.From<T>(Value);
if (TypeInfo(T) = TypeInfo(string)) then
begin
FHashTable.AddString(Name, LValue.AsString);
end
else if (TypeInfo(T) = TypeInfo(Integer)) then
begin
FHashTable.AddInteger(Name, LValue.AsInteger);
end
......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)