2016-05-28 25 views
0

ITValue auf andere Art Casting

uses 
    System.Rtti; 

procedure TForm1.BitBtn1Click(Sender: TObject); 
var 
    _UserString: string; 
    _CastedValue: TValue; 
    _IntExampleValue: TValue; 
    _DateTimeExampleValue: TValue; 
begin 
    _UserString := '55'; 
    _IntExampleValue := TValue.From<integer>(-199); 

    if not TValue.From(_UserString).TryCast(_IntExampleValue.TypeInfo, _CastedValue) 
    then 
    ShowMessage('Failed to cast') 
    else 
    ShowMessage('Casted successfully'); 

    _UserString := DateTimeToStr(Now); 
    _DateTimeExampleValue := TValue.From<TDateTime>(Now); 

    if not TValue.From(_UserString).TryCast(_DateTimeExampleValue.TypeInfo, _CastedValue) 
    then 
    ShowMessage('Failed to cast') 
    else 
    ShowMessage('Casted successfully'); 
end; 

Beide Male ich SMS-Nachricht: bekommen haben, dass sie werfen gescheitert, aber warum? Ich sehe nichts falsch.

Antwort

0

TValue ist nicht für diese Art von Abgüssen vorgesehen. Sie können nicht zwischen zwei inkompatiblen Typen umwandeln, für die die Pascal-Sprache nicht direkt interpolieren kann. Genau wie eine String nicht direkt einer Integer oder TDateTime zugeordnet werden kann, kann eine TValue<String> nicht zu eineroder einer TValue<TDateTime> gegossen werden. Es gibt keinen Ersatz für die Verwendung von Konvertierungsfunktionen wie StrToInt() und StrToDateTime().