Hallo,
ich habe ein kleines Problem.
Undzwar versuche ich einen Wert A in einen Wert B zu konvertieren.
Da ich über die RTTI arbeite, wollte ich diesen Vorgang eigentlich automatisieren.
D.h. die Typkonvertierung abhängig vom Zieltypen durchführen.
Allerdings scheitere ich daran, dass ich einen String nicht in einen Integer umwandelt kann.
Folgender Code führt nicht zum gewünschten Ergebnis:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| var LString: TValue; LInteger: TValue; begin LString := TValue.From<string>('10'); LInteger := LString.AsInteger; end; |
Nachdem ich mich schlau gemacht habe sehe ich das Problem in den Internas von TValue.
Der Aufruf .AsInteger führt letztendlich zum Aufruf von Conversions[SourceKind, DestKind]()
d.h. es wird die Funktion Zum konvertieren über den Conversions-Array aufgerufen.
TConvertFunc = function(const ASource: TValue; ATarget: PTypeInfo; out AResult: TValue): Boolean;
Conversions: array[TTypeKind,TTypeKind] of TConvertFunc = (..);
Doof ist nur, dass genau die Typumwandlung von String auf Integer immer die Konvertierungsroutine ConvFail aufruft,
also auch immer fehlschlägt. Gibt es eine Möglichkeit dieses Verhalten zu umgehen oder einen anderen Weg?
Moderiert von
Narses: Code- durch Delphi-Tags ersetzt
//Edit: Hat sich erledigt. Ich arbeite direkt mit Variant.
Stellen Sie sich bitte Zirkusmusik vor.