看起来TValue中缺少我认为是必须的方法; TValue.Equals(TValue)。
那么有没有一种快速而不错的方法可以比较两个TValue,最好不使用TValue.ToString(),因为它允许变体、记录等之间出现错误的匹配。
Delphi-Mocks提供了两个函数:
function CompareValue(const Left,Right : TValue): Integer;
function SameValue(const Left, Right: TValue): Boolean;
使用 TValue 记录助手,您还可以执行 TValue.Equals(TValue);
根据 Stefan Glienke 的许可,遵循 Apache 条款。
以下是 Stefan 的原始源代码:delphisorcery。
如果您需要扩展变量的功能,请添加:
function TValueHelper.IsVariant: Boolean;
begin
Result := TypeInfo = System.TypeInfo(Variant);
end;
并插入
if Left.IsVariant and Right.IsVariant then
begin
Result := Left.AsVariant = Right.AsVariant;
end else
SameValue
函数中进行字符串比较之后。