Ho bisogno di sapere il modo migliore per confrontare due oggetti e scoprire se ci sono uguali. Sto sovrascrivendo sia GethashCode che Equals. Quindi una classe base si presenta come:C# Come trovare se due oggetti sono uguali
public class Test
{
public int Value { get; set; }
public string String1 { get; set; }
public string String2 { get; set; }
public override int GetHashCode()
{
return Value^String1.GetHashCode()^String2.GetHashCode();
}
public override bool Equals(object obj)
{
return GetHashCode() == obj.GetHashCode();
}
}
Così, per scopi di test ho creato due oggetti:
Test t = new Test()
{
Value = 1,
String1 ="One",
String2 = "One"
};
Test t2 = new Test()
{
Value = 1,
String1 = "Two",
String2 = "Two"
};
bool areEqual = t.Equals(t2);
a testare questa areEqual ritorna vero evento se entrambi gli oggetti sono diversi. Mi rendo conto che ciò è dovuto al fatto che String1 e String2 hanno lo stesso valore in ogni oggetto e quindi si annullano a vicenda quando si esegue l'hashing.
C'è un modo migliore di utilizzare l'oggetto hashing che risolverà il problema?
Re 'SafeGetHashCode' - solo per dire che' EqualityComparer .GetHashCode' farà qualcosa di molto simile - il metodo di estensione è abbastanza ordinata, anche se, p –
La tua risposta è veramente buono, mentre la prima parola è sbagliata: "No" è la risposta sbagliata alla sua domanda: "C'è un modo migliore ..." Inoltre la classe di Simons Test non ha una classe base né implementa un'interfaccia. quindi la parola chiave override è davvero sbagliata – OlimilOops
@Oops: risolverà il "No" ... ma la classe Test * ha * una classe base - la classe base implicita di System.Object. Questi metodi * stanno * sovrascrivendo le implementazioni degli oggetti. –