【发布时间】:2010-11-09 23:38:04
【问题描述】:
我有一些代码用于循环某些对象的属性并比较属性值,看起来有点像这样:
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 的类,它有几个属性,所有这些都是简单的数据类型(字符串、整数等)。我在我的单元测试代码中创建了一个实例,另一个由我的 DataModel 创建,从数据库中获取数据(MySql,我使用的是 MySqlConnector)。
尽管调试器显示属性值是相同的,但上面代码中的比较还是失败了。
即:我在 UnitTest 中创建的对象 A 的 Amount 属性值为 10。从我的存储库中检索到的对象 B 的 Amount 属性值为 10。比较失败!如果我将代码更改为
if (propInfo.GetValue(a, null).ToString() != propInfo.GetValue(b, null).ToString())
{
...
}
一切都如我所料。如果我直接在 UnitTest 中创建 PurchaseOrder 实例,比较也不会失败。
我会非常感谢任何回答。祝你有美好的一天!
【问题讨论】:
标签: c# reflection properties comparison