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()
,