Is there any way to determine the type of a variable passed as an argument to a method? Consider the class:

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

```

with the method implementation

```
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;

```

where TInt.Create() and TString.Create() have different sets of arguments, yet, they both inherit from TDataType.

Now, I know the `is`-operator can't be used like this, but is there a legal alternative that does what I'm asking here?