Delphi 如何将接口变量分配给Rtti.TValue类型的变量
目前,我对delphi2010进行了试验,发现了Rtti单元的TValue类型。TValue具有非常有趣的特性,但我找不到分配接口的方法 我尝试以下方法Delphi 如何将接口变量分配给Rtti.TValue类型的变量,delphi,delphi-2010,rtti,Delphi,Delphi 2010,Rtti,目前,我对delphi2010进行了试验,发现了Rtti单元的TValue类型。TValue具有非常有趣的特性,但我找不到分配接口的方法 我尝试以下方法 program Project1; uses Classes, SysUtils, Rtti; var list : IInterfaceList; value : TValue; begin // all these assignments works value := 1; value := 'Hello';
program Project1;
uses
Classes, SysUtils, Rtti;
var
list : IInterfaceList;
value : TValue;
begin
// all these assignments works
value := 1;
value := 'Hello';
value := TObject.Create;
// but nothing of these assignments works
list := TInterfaceList.Create;
value := list; // [DCC Fehler] Project1.dpr(15): E2010 incompatible types: 'TValue' and 'IInterfaceList'
value.From[list]; // [DCC Fehler] Project1.dpr(16): E2531 Method 'From' requires explicit typarguments
value.From<IInterfaceList>[list]; // [DCC Fehler] Project1.dpr(17): E2035 Not enough parameters
end.
程序项目1;
使用
类、SysUtils、Rtti;
变量
列表:界面列表;
价值:TValue;
开始
//所有这些作业都有效
值:=1;
值:='Hello';
值:=TObject.Create;
//但这些任务都不起作用
列表:=TInterfaceList.Create;
值:=列表;//[DCC Fehler]Project1.dpr(15):E2010不兼容类型:“TValue”和“IInterfaceList”
值。从[列表];//[DCC Fehler]Project1.dpr(16):E2531方法“From”需要显式类型参数
值。从[列表];//[DCC Fehler]项目1.dpr(17):E2035参数不足
结束。
我找不到任何进一步的信息。不在delphi帮助系统中,也不在internet上。我做错了什么?你的最后一次尝试是最接近的。From是一个类函数,它通过一个参数创建一个TValue。你可能把方括号放在那里,因为CodeInsight就是这样显示的,对吧?这实际上是CodeInsight中的一个小故障;对于基于泛型的函数,它就是这样做的,您应该使用括号。正确的语法如下所示:
Value := TValue.From<IInterfaceList>(list);
Value:=TValue.From(列表);
这是该程序的工作版本:
program Project1;
uses
Classes, SysUtils, Rtti;
var
list : IInterfaceList;
value : TValue;
begin
// all these assignments works
value := 1;
value := 'Hello';
value := TObject.Create;
// but nothing of these assignments works
list := TInterfaceList.Create;
value := TValue.From(list);
end.
值得指出的是,对于像这样简单的类型良好的参数列表,类型推断应该可以很好地工作,并且
TValue.From(list)
应该足够了。感谢Mason和Barry,我已经花了2个小时来寻找解决方案。很难意识到Codeinsight只是在跟我开玩笑。TValue.From(list)代码>比TValue.From(列表)更简单,可读性更强代码>