Jaki jest najlepszy sposób na porównanie dwóch jednostek struktury podmiotu?

Chcę znać najbardziej skuteczny sposób porównywania dwóch elementów tego samego typu.

Jedna encja jest tworzona ręcznie z pliku xml (tj. Nowa instancja i ręcznie ustawiane właściwości), a druga jest pobierana z mojego kontekstu obiektu.

Chcę wiedzieć, czy wartości właściwości są takie same w każdym przypadku.

Moje pierwsze myśli to wygenerowanie wartości mieszanej wartości właściwości z każdego obiektu i porównanie haszów, ale może istnieć inny sposób lub wbudowany sposób?

Wszelkie sugestie będą mile widziane.

Wielkie dzięki,

James

AKTUALIZACJA

Wymyśliłem to:

static class ObjectComparator<T>
{
    static bool CompareProperties(T newObject, T oldObject)
    {
        if (newObject.GetType().GetProperties().Length != oldObject.GetType().GetProperties().Length)
        {
            return false;
        }
        else
        {
            var oldProperties = oldObject.GetType().GetProperties();

            foreach (PropertyInfo newProperty in newObject.GetType().GetProperties())
            {
                try
                {
                    PropertyInfo oldProperty = oldProperties.Single<PropertyInfo>(pi => pi.Name == newProperty.Name);

                    if (newProperty.GetValue(newObject, null) != oldProperty.GetValue(oldObject, null))
                    {
                        return false;
                    }
                }
                catch
                {
                    return false;
                }
            }

            return true;
        }
    }
}

Jeszcze tego nie testowałem, to więcej jedzenia do przemyślenia, aby wygenerować więcej pomysłów z grupy.

Jedną z rzeczy, która może być problemem, jest porównywanie właściwości, które same mają wartości encji, jeśli domyślny komparator porównuje się z odniesieniem do obiektu, to nigdy nie będzie prawdziwy. Możliwą poprawką jest przeciążenie operatora równości na moich obiektach, tak aby porównywał się z ID podmiotu.

questionAnswers(1)

yourAnswerToTheQuestion