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

Mar*_*ius 9 delphi equality rtti tvalue

在我看来,TValue中缺少一个强制性方法; TValue.Equals(TValue).

因此,比较2个TValues的快速和体面的方式,最好不使用TValue.ToString(),它允许变体,记录等之间的错误匹配.

LU *_* RD 13

Delphi-Mocks提供两个功能:

function CompareValue(const Left,Right : TValue): Integer;
function SameValue(const Left, Right: TValue): Boolean;
Run Code Online (Sandbox Code Playgroud)

有了TValue的记录助手,你也可以做到 TValue.Equals(TValue);

根据Apache条款获得许可,并获得Stefan Glienke的许可.

以下是Stefan的原始资料:delphisorcery.

如果需要扩展变体的功能,请添加:

function TValueHelper.IsVariant: Boolean;
begin
  Result := TypeInfo = System.TypeInfo(Variant);
end;
Run Code Online (Sandbox Code Playgroud)

并插入

if Left.IsVariant and Right.IsVariant then
begin
  Result := Left.AsVariant = Right.AsVariant;
end else
Run Code Online (Sandbox Code Playgroud)

SameValue函数中进行isString比较之后.

  • @Marius可以免费为[原始资料]做出贡献(http://code.google.com/p/delphisorcery/source/browse/trunk/Source/Core/DSharp.Core.Reflection.pas). (2认同)