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 ответ

  1. TValue не предназначен для выполнения такого рода отливок. Нельзя выполнять приведение между двумя несовместимыми типами, между которыми сам язык Pascal не может выполнять приведение непосредственно. Так же , как a Stringне может быть непосредственно назначен Integerили aTDateTime, a TValue<String>не может быть приведен к a TValue<Integer>или a TValue<TDateTime>. Нет замены для использования функций преобразования, таких как StrToInt()и StrToDateTime().