Как проверить, равны ли два объекта только по своим свойствам, не нарушая существующий Object.Equals ()?

По сути, GethashCode отличается, даже если они содержат ОДИНАКОВЫЕ значения для свойств ... так почему же по умолчанию возвращаются хэш-коды diff?

public class User
{
    public Int32 Id { get; set; }
    public String Username { get; set; }
}

User a = new User();
a.Id = 1;
a.Username = "Hello";

User b = new User();
b.Id = 1;
b.Username = "Hello";

Console.WriteLine("Hash A: {0} | Hash B: {1}", a.GetHashCode(), b.GetHashCode());
//Hash A: 37121646 | Hash B: 45592480 <-- these values change each time I rerun the app?

Есть ли более правильный способ сделать это, чтобы я не не нарушает принципа работы Object.Equals для моих объектов, но я все еще могу иметь собственную проверку равенства на основе значений параметров?

Я спрашиваю, потому что у меня есть служба: SynchronizeUsers () , который загружает множество пользователей. Вместо того, чтобы очищать мой кеш от пользователей, я бы предпочел просто обновить тех, которые нужно обновить, удалить тех, о которых синхронизирует, и добавить новых. Но я не могу просто выполнить Object.Equals () для этих объектов.

11
задан michael 20 June 2011 в 15:27
поделиться