我有
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;
两次我都收到消息说它没能投,但为什么?我没有看到任何错误。
答案 0 :(得分:0)
TValue
并非旨在进行此类演员表演。你不能在两种不兼容的类型之间强制转换Pascal语言本身不能直接在它们之间进行转换。正如String
无法直接分配给Integer
或TDateTime
一样,TValue<String>
无法投放到TValue<Integer>
或TValue<TDateTime>
。使用StrToInt()
和StrToDateTime()
等转换函数是无可替代的。