德尔福变体和TValues

时间:2016-09-21 19:09:00

标签: delphi

我知道转换数据类型时Variants很慢,即使我只是添加了两个包含整数的变量值。我还发现了另一个看似变体的类似东西,叫做TValue

它们之间的区别是什么?

我正在考虑使用TStopWatch进行经典的速度测试,但我不认为这足以理解差异

2 个答案:

答案 0 :(得分:17)

TValue不是用于转换数据类型,而是用于在使用RTTI时传输值。

它只允许转换直接分配兼容的数据类型(例如IntegerInt64ByteInteger)。但与Variant不同的是,它不允许将包含数字的string转换为Integer,但会引发EInvalidCast例外。

答案 1 :(得分:15)

TValue不像Variant一样。它不会像Variant那样执行数据转换。如果您要求TValue返回与当前持有的类型不同的类型,并且保持的类型与请求的类型不是分配兼容的(即,它通常不会隐式地转换为正常语言语法),然后TValue将引发EInvalidCast例外。