2012-03-21 9 views
9

Sembra che, a mio parere, manca il metodo obbligatorio da TValue; TValue.Equals (TValue).Delphi XE: dov'è il mio TValue.Equals()?

Così che cosa è un modo veloce e decente di confronto di 2 TValues, preferibilmente senza l'uso di TValue.ToString(), che consente di falsi match tra le varianti, dischi, ecc

+0

Penso che DeHL (ora fuori produzione) abbia alcune cose da fare. Non so specifiche. http://code.google.com/p/delphilhlplib/ – awmross

risposta

13

Delphi-Mocks presenta due funzioni:

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

Con l'aiuto record per TValue si può anche fare TValue.Equals(TValue);

Distribuito sotto licenza Apache termini e sotto il permesso di Stefan Glienke.

Ecco la fonte originale di Stefan: delphisorcery.

Se è necessario estendere la funzionalità per le varianti, aggiungere:

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

e inserire

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

dopo il confronto IsString nella funzione SameValue.

+0

Upvote per il collegamento, ma sembra ancora incompleto (ad esempio, manca l'uguaglianza delle varianti). Sto cercando una versione più piccola, confrontando per es. indirizzi di memoria. – Marius

+1

@Marius Puoi semplicemente aggiungere la funzionalità mancante da solo. –

+0

@DavidHeffernan Vero, anche se ciò renderebbe obsoleta la mia domanda iniziale: p – Marius

Problemi correlati