У меня есть некоторый код, который я использую для циклического просмотра свойств определенных объектов и сравнения значений свойств, который выглядит примерно так:
public static bool AreObjectPropertyValuesEqual(object a, object b)
{
if (a.GetType() != b.GetType())
throw new ArgumentException("The objects must be of the same type.");
Type type = a.GetType();
foreach (PropertyInfo propInfo in type.GetProperties())
{
if (propInfo.GetValue(a, null) != propInfo.GetValue(b, null))
{
return false;
}
}
return true;
}
Теперь о странном поведении. Я создал класс с именем PurchaseOrder с парой свойств, которые являются простыми типами данных (строки, целые и т. Д.). Я создаю один экземпляр в своем коде Unit-Test, а другой создается моей DataModel, извлекая данные из базы данных (MySql, я использую MySqlConnector).
Даже если отладчик показывает мне, что значения свойств идентичны, сравнение в приведенном выше коде не удается.
То есть: у моего объекта A, созданного в UnitTest, значение свойства Amount равно 10. Объект B, полученный из моего репозитория, имеет значение свойства Amount , равное 10. Сравнение не удалось ! Если я изменю код на
if (propInfo.GetValue(a, null).ToString() != propInfo.GetValue(b, null).ToString())
{
...
}
все работает так, как я ожидал. Сравнение также не завершится неудачей, если я создам PurchaseOrder экземпляров непосредственно в UnitTest.
Я был бы очень благодарен за любые ответы. Хорошего дня!