Okay, überzeugt. Habs gerade geändert. Allerdings geht das hier nicht:
Result := TValue.From<String>(Value).AsType<T>;
Endet in einer
Exception:
Code:
Im Projekt Project1.exe ist eine
Exception der Klasse EInvalidCast mit der Meldung 'Ungültige Typumwandlung' aufgetreten.
Hatte jetzt aber keine Lust mehr da lange zu testen
Hmm, hatte mir nur TValue in den
API Docs auf Embacadings.com angesehen. Hatte einfach erwartet dass es in beide Richtungen geht. Embarcadings scheint wohl auf Öhm-Momente in ihren APIs viel Wert zu legen, oder einfach nur keinen Anspruch zu haben...
Wie ich bereits sagte. In die eine Richtung geht es nur wegen dem ToString. Das wandelt alles in seine String Repräsentation um (genau wie das ToString in TObject). Es findet hier
keine Typenkonvertierung statt. Bei deinem Versuch einen String in den Typen umzuwandeln bemüht die
RTTI intern die Typenkonvertierung, sofern es sich um sehr ähnliche Typen handelt (Float typ, ordinal typ, etc). Und TValue ist
nicht für eine Typenkonvertierung darüber hinaus gedacht und funktioniert auch nicht, wie du gesehen hast. Du kannst damit nichtmal nen string in nen integer umwandeln, obwohl das eigentlich technisch kein Probelm wäre.