在我看来,TValue 中似乎缺少一种强制方法;TValue.Equals(TValue)。
那么,比较 2 个 TValue 的快速和体面的方法是什么,最好不使用 TValue.ToString(),它允许变体、记录等之间的错误匹配。
Delphi-Mocks提供了两个功能:
function CompareValue(const Left,Right : TValue): Integer;
function SameValue(const Left, Right: TValue): Boolean;
使用 TValue 的记录助手,您还可以TValue.Equals(TValue);
根据 Apache 条款和 Stefan Glienke 许可获得许可。
这是 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
函数中的 isString 比较之后。