Delphi: determinar el tipo real de un genérico?

¿Hay alguna forma de determinar el tipo de una variable pasada como un argumento a un método? Considera la clase:

TSomeClass = class
  procedure AddToList<T: TDataType; U: TListClass<T>>(Element: T; List: U);
end;

con la implementación del método

procedure TSomeClass.AddToList<T, U>(Element: T; List: U);
begin
  if Element is TInt then
    List.AddElement(TInt.Create(XXX))
  else if Element is TString then
    List.AddElement(TString.Create(YYY));
end;

donde TInt.Create () y TString.Create () tienen diferentes conjuntos de argumentos, sin embargo, ambos heredan de TDataType.

Ahora, yo sé lais-El operador no se puede usar de esta manera, pero ¿hay una alternativa legal que haga lo que le pido aquí?

Respuestas a la pregunta(2)

Su respuesta a la pregunta