2012-03-21 18 views
9

Parece que, en mi opinión, falta un método obligatorio de TValue; TValue.Equals (TValue).Delphi XE: ¿Dónde está mi TValue.Equals()?

¿Cuál es tan una manera rápida y decente de la comparación de 2 tValues, preferiblemente sin el uso de TValue.ToString(), que permite falsas coincidencias entre las variantes, registros, etc.

+0

Creo que DeHL (ahora descontinuado) tiene algunas cosas para hacer esto. No sé detalles. http://code.google.com/p/delphilhlplib/ – awmross

Respuesta

13

Delphi-Mocks presenta dos funciones:

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

Con el ayudante récord para TValue también se puede hacer TValue.Equals(TValue);

licencia bajo los términos de Apache y bajo el permiso de Stefan Glienke.

Aquí está la fuente original de Stefan: delphisorcery.

Si necesita ampliar la funcionalidad de las variantes, añadir:

function TValueHelper.IsVariant: Boolean; 
begin 
    Result := TypeInfo = System.TypeInfo(Variant); 
end; 

e insertar

if Left.IsVariant and Right.IsVariant then 
begin 
    Result := Left.AsVariant = Right.AsVariant; 
end else 

después de la comparación isString en la función SameValue.

+0

Votación a favor por el enlace, pero parece que todavía está incompleto (por ejemplo, falta la determinación de la igualdad de variantes). Estoy buscando una versión más pequeña, comparando, p. direcciones de memoria. – Marius

+1

@Marius Simplemente puede agregar la funcionalidad faltante usted mismo. –

+0

@DavidHeffernan Cierto, aunque eso dejaría obsoleta mi pregunta inicial: p – Marius