Auf Variant sollte man imo an dieser Stelle verzichten und mit TValue und/oder generics (unter Zuhilfenahme von type inference) arbeiten.
Beispiel:
Delphi-Quellcode:
procedure TLinq<T>.SetProperty<TValueType>(Item: Pointer; const PropertyName: string; Value: TValueType);
var
v: TValue;
begin
v := TValue.From<TValueType>(Value);
...
end;
...
myLinq.SetProperty<Integer>(myObject, 'MyIntProp', 42);
// oder mit type inference (das heißt der Compiler schnallt, von welchem Typ TValueType wirklich ist - Achtung: das funzt nicht immer 100%ig)
myLinq.SetProperty(myObject, 'MyIntProp', 42); // <- kein <Integer> nötig.