10

在我看来,TValue 中似乎缺少一种强制方法;TValue.Equals(TValue)。

那么,比较 2 个 TValue 的快速和体面的方法是什么,最好不使用 TValue.ToString(),它允许变体、记录等之间的错误匹配。

4

1 回答 1

14

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 比较之后。

于 2012-03-21T08:47:35.810 回答