基于反射机制,通过Type获取PropertyInfo其类型的属性,再通过GetValue方法获取属性的值。
/// <summary>
/// 比较两个对象的属性值是否相同
/// </summary>
/// <param name="expected">预期对象</param>
/// <param name="actual">实际对象</param>
/// <returns></returns>
public bool CompareModelsValue(object expected, object actual)
{
Type m_expectedType = expected.GetType();
// Type.GetType(expected.ToString();
PropertyInfo[] m_expectedProperties = m_expectedType.GetProperties();
object[] m_expectedAttributes = new object[m_expectedProperties.Length];
for (int i = 0; i < m_expectedProperties.Length; i++)
{
m_expectedAttributes[i] = m_expectedProperties[i].GetValue(expected, null);
}
Type m_actualType = actual.GetType();
PropertyInfo[] m_actualProperties = m_actualType.GetProperties();
object[] m_actualAttributes = new object[m_actualProperties.Length];
for (int i = 0; i < m_actualProperties.Length; i++)
{
m_actualAttributes[i] = m_actualProperties[i].GetValue(actual, null);
}
if (m_expectedAttributes.Length == m_actualAttributes.Length)
{
for (int i = 0; i < m_actualAttributes.Length; i++)
{
if (m_actualAttributes[i] == m_expectedAttributes[i])
continue;
else
return false;
}
}
else
{
return false;
}
return true;
}