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
функция.