Delphi: determine o tipo real de um genérico?

Existe alguma maneira de determinar o tipo de uma variável passada como um argumento para um método? Considere a classe:

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

com a implementação do 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;

onde TInt.Create () e TString.Create () têm diferentes conjuntos de argumentos, no entanto, ambos herdam de TDataType.

Agora eu sei ois-operador não pode ser usado assim, mas existe uma alternativa legal que faz o que estou pedindo aqui?

questionAnswers(2)

yourAnswerToTheQuestion