Delphi:确定通用的实际类型?

前端之家收集整理的这篇文章主要介绍了Delphi:确定通用的实际类型?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法确定作为方法参数传递的变量的类型?考虑班级:
  1. TSomeClass = class
  2. procedure AddToList<T: TDataType; U: TListClass<T>>(Element: T; List: U);
  3. end;

方法实现

  1. procedure TSomeClass.AddToList<T,U>(Element: T; List: U);
  2. begin
  3. if Element is TInt then
  4. List.AddElement(TInt.Create(XXX))
  5. else if Element is TString then
  6. List.AddElement(TString.Create(YYY));
  7. end;

其中TInt.Create()和TString.Create()具有不同的参数集,但它们都继承自TDataType.

现在,我知道is-operator不能像这样使用,但是有没有合法的替代方法来做我在这里要求的东西?

解决方法

这里无法使用is运算符是一个已知问题,但有一个非常简单的解决方法.
  1. if TObject(Element) is TInt then
  2. List.AddElement(TInt.Create(XXX))

此外,由于泛型的类型是类的一部分并且在编译时是已知的,因此您可能最好重构代码.制作两个不同的泛型类,其中一个接受TInt作为其< T>.参数,另一个接受TString.在特定级别将特定于类型的功能放入其中,并让它们从共同的祖先下降以获得共享功能.

猜你在找的Delphi相关文章