TValue投射到其他类型

时间:2016-05-28 08:14:53

标签: delphi delphi-xe2 rtti tvalue

我有

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;

两次我都收到消息说它没能投,但为什么?我没有看到任何错误。

1 个答案:

答案 0 :(得分:0)

TValue并非旨在进行此类演员表演。你不能在两种不兼容的类型之间强制转换Pascal语言本身不能直接在它们之间进行转换。正如String无法直接分配给IntegerTDateTime一样,TValue<String>无法投放到TValue<Integer>TValue<TDateTime> 。使用StrToInt()StrToDateTime()等转换函数是无可替代的。