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

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

Другие вопросы по тегам