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.