Delphi XE: Где мое TValue.Equals ()? - PullRequest
9 голосов
/ 21 марта 2012

Кажется, что один, по моему мнению, обязательный метод отсутствует в TValue;TValue.Equals (TValue).

Итак, каков быстрый и приличный способ сравнения двух значений TValue, желательно без использования TValue.ToString (), который допускает ложные совпадения между вариантами, записями и т. Д.

1 Ответ

13 голосов
/ 21 марта 2012

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

после сравнения isString в функции SameValue.

...