如何将泛型存储在非泛型对象持有的泛型TList中?

type
  TXmlBuilder = class
  type
    TXmlAttribute<T>= class
      Name: String;
      Value: T;
    end;

    TXmlNode = class
      Name: String;
      Attributes: TList<TXmlAttribute<T>>;
      Nodes: TList<TXmlNode>;
    end;
  ...
  end;


编译器说T不在

Attributes: TList<TXmlAttribute<T>>;


-
皮埃尔·雅格

最佳答案

TXmlNode不知道什么是T。应该是什么?

也许你的意思是:

TXmlNode<T> = class
  Name: String;
  Attributes: TList<TXmlAttribute<T>>;
  Nodes: TList<TXmlNode<T>>;
end;


...或者,或者您需要指定类型。

但是,您似乎在这里缺少了一些东西。泛型允许您为每种类型创建一个单独的类,而不是为所有类型创建一个类。在上面的代码中,TList包含一个相同类型的数组,您可能希望它们不同。考虑一下这个:

  TXmlBuilder = class
  type
    TXmlAttribute= class
      Name: String;
      Value: Variant;
    end;

    TXmlNode = class
      Name: String;
      Attributes: TList<TXmlAttribute>;
      Nodes: TList<TXmlNode>;
    end;
  ...
  end;

08-25 14:29
查看更多