ho trovato una domanda similecorrettamente implementare il confronto di due oggetti di tipo diverso ma semanticamente equivalenti
How to compare two distinctly different objects with similar properties
che possono implicitamente e/o in parte, una risposta alla mia domanda.
Supponiamo che io voglio confrontare (senza un sacco di condizioni nidificate) questo oggetto:
class ObjectA {
public string PropertyX { get; set; }
public char PropertyY { get; set; }
public long PropertyZ { get; set; }
}
ad un System.String
. Sono interessato solo a uguaglianza o disuguaglianza (non un intervallo di valori sull'identità).
L'implementazione di IEquatable<string>
in ObjectA
è una scelta appropriata? Non mi interessa cosa semplicemente funziona, voglio identificare il modello corretto per tale caso.
Come altre informazioni, si prega di considerare che ObjectA
sarà spesso fornito come sequenza di IEnumerable<ObjectA>
.
Non ho bisogno di sapere se "string"
==
o !=
objectA
istanza; l'ordinamento non è coinvolto.
Modifica per chiarire (e aiuto)
Ci dispiace, ma scrivere una buona domanda è a volte difficile ...
Supponiamo che non posso rappresentare ObjectA
come stringa a scopo di confronto (violare l'incapsulamento non è un'opzione).
In context-1 Devo corrispondere a
PropertyY
.In context-2 devo confrontarlo con un algoritmo applicato a
PropertyY
/PropertyZ
.
@Oliver soluzione alla fine della domanda mi aiuta ancora (e di nuovo 1). posso semplicemente definire un'interfaccia personalizzata:
interface IContextConverter {
string ToEquatableStringForContext1();
string ToEquatableStringForContext2();
}
dal momento che ho anche un ObjectB
con stessa logica, ma diverse proprietà, entrambi saranno implementare IContextConverter
(o forse trovare un nome migliore) evitando di violare RAP.
Penso che sia necessario sovrascrivere il metodo Equals, come si vede in http://stackoverflow.com/questions/4219261/overriding-operator-how-to-compare-to-null. – user1929959
Cosa intendi? Se 'System.String' è' "Hello mum!" ', E' ObjectA' ha x, y, z uguale a '" Cool "', ''Z'' e' 42L', come faccio a capire fuori se sono uguali o no? –
Non ne sono sicuro. Penso che verrà usato impropriamente poiché è progettato per confrontare oggetti dello stesso tipo ... Guarda il confronto dei tipi con l'operatore (== per esempio). L'oggetto nel LHS e l'altro nel RHS sono dello stesso tipo. – jay