Necesito saber la mejor manera de comparar dos objetos y averiguar si no hay igual. Estoy anulando tanto GethashCode como Equals. Así que una clase básica se parece a:C# Cómo encontrar si dos objetos son iguales
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();
}
}
lo tanto, para los propósitos de prueba que crea dos objetos:
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);
En las pruebas de este areEqual devuelve verdadero caso de que ambos objetos son diferentes. Me doy cuenta de que esto se debe a que String1 y String2 tienen el mismo valor en cada objeto y, por lo tanto, se anulan mutuamente cuando se procesan hash.
¿Hay alguna manera mejor de eliminar el objeto hash que el método que tengo que resolverá mi problema?
Re 'SafeGetHashCode' - sólo para mencionar que' EqualityComparer .GetHashCode' va a hacer algo muy similar - el método de extensión es bastante ordenado, sin embargo; p –
Su respuesta es muy buena, mientras que la primera palabra es incorrecta: "No" es la respuesta incorrecta a su pregunta: "¿Hay una manera mejor ..." Además, la clase de prueba de Simons no tiene una clase base ni implementa una interfaz. por lo que la palabra clave de anulación está realmente equivocada – OlimilOops
@Oops: Arreglará el "No" ... pero la clase de prueba * does * tiene una clase base, la clase base implícita de System.Object. Estos métodos * están * anulando las implementaciones de objetos. –