1

我有

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;

两次我都收到消息说它无法投射,但为什么呢?我看不出有什么不对。

4

1 回答 1

0

TValue不是为了做那种演员而设计的。您不能在 Pascal 语言本身无法直接在其之间进行转换的两种不兼容类型之间进行转换。正如 aString不能直接分配给 anInteger或 a一样TDateTime,aTValue<String>也不能强制转换为 aTValue<Integer>或 a TValue<TDateTime>StrToInt()使用和之类的转换函数是无可替代的StrToDateTime()

于 2016-05-28T08:48:31.863 回答