2

目前我给delphi2010试用了一下,发现Rtti Unit的TValue类型。TValue 具有非常有趣的功能,但我找不到分配接口的方法。

我尝试以下

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.

我找不到任何进一步的信息。不在德尔福帮助系统中,也不在互联网上。我做错了什么?

4

2 回答 2

7

你的最后一次尝试是最接近的。TValue.From 是一个从参数创建 TValue 的类函数。您可能将方括号放在那里,因为这就是 CodeInsight 的显示方式,对吧?这实际上是 CodeInsight 中的一个小故障。它对基于泛型的函数执行此操作,您应该在其中使用括号。正确的语法如下所示:

Value := TValue.From<IInterfaceList>(list);
于 2009-09-06T16:39:12.323 回答
7

这是该程序的工作版本:

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.
于 2009-09-06T17:02:43.587 回答