Delphi XE: Где мое TValue.Equals()?

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

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

1 ответ

Решение

Delphi-Mocks предлагает две функции:

function CompareValue(const Left,Right : TValue): Integer;
function SameValue(const Left, Right: TValue): Boolean;

С помощником записи для TValue вы также можете сделать TValue.Equals(TValue);

Лицензировано на условиях Apache и с разрешения Stefan Glienke.

Вот оригинальный источник Стефана: 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 функция.

Другие вопросы по тегам