我知道当我转换数据类型时,即使只是添加包含整数的两个变量值,Variants
也会很慢。我还发现了另一种类似于 Variants
的东西,叫做 TValue
。
它们之间有什么区别?
我考虑使用 TStopWatch
进行经典的速度测试,但我认为这不足以理解它们之间的区别。
我知道当我转换数据类型时,即使只是添加包含整数的两个变量值,Variants
也会很慢。我还发现了另一种类似于 Variants
的东西,叫做 TValue
。
它们之间有什么区别?
我考虑使用 TStopWatch
进行经典的速度测试,但我认为这不足以理解它们之间的区别。
TValue
并非用于转换数据类型,而是用于在使用RTTI时传递值。
它仅允许转换直接可赋值的数据类型(例如将Integer
转换为Int64
或将Byte
转换为Integer
)。但与Variant
不同的是,它不允许例如将包含数字的string
强制转换为Integer
,而会引发EInvalidCast
异常。
TValue
不像Variant
那样,它不会执行数据转换。如果您要求TValue
返回与当前持有类型不同的类型,并且所持有的类型与请求的类型不兼容(即在正常语言语法中通常不会隐式转换),则TValue
会引发EInvalidCast
异常。