Мне нужно знать лучший способ сравнить два объекта и выяснить, равны ли они. Я переопределяю как GethashCode, так и Equals. Итак, базовый класс выглядит так:
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();
}
}
Итак, для целей тестирования я создал два объекта:
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 );
При тестировании это areEqual возвращает истинное событие, хотя оба объекта различны. Я понимаю, что это потому, что String1 и String2 имеют одинаковое значение в каждом объекте и, таким образом, взаимно исключают друг друга при хешировании
Есть ли лучший способ избавиться от хэширования объекта, чем мой метод, который решит мою проблему?