Delphi XE:我的TValue.Equals()在哪里?

10

看起来TValue中缺少我认为是必须的方法; TValue.Equals(TValue)。

那么有没有一种快速而不错的方法可以比较两个TValue,最好不使用TValue.ToString(),因为它允许变体、记录等之间出现错误的匹配。


我认为DeHL(现已停止)有一些东西可以做到这一点。不知道具体细节。http://code.google.com/p/delphilhlplib/ - awmross
1个回答

14

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 函数中进行字符串比较之后。

点赞这个链接,但似乎它仍然不完整(例如,缺少确定变量相等的部分)。我正在寻找一个更小的版本,比较例如内存地址。 - Marius
1
@Marius 你可以自己添加缺失的功能。 - David Heffernan
@DavidHeffernan 确实,不过那会使我的最初问题变得过时 :p - Marius
@Marius 完全不是这样。你可以在Stefan的代码基础上进行开发。这就是我的意思。从Stefan的代码开始,加入你需要的一点额外内容。 - David Heffernan
@DavidHeffernan 只是跟你开个玩笑,我会看一下重用他的代码并修补任何缺失的功能。 - Marius
2
@Marius 欢迎为原始来源做出贡献。 - Stefan Glienke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接