.net 反射比较属性值应该总是用Equals而不要用==
.net 中反射两个物体比较属性值的时候,应该总是Equals而不要用==,因为反射时不知道属性数据类型,会统一用object,这时候,即使原属性值数据类型是值类型,用==的时候依然会按引用比较,会总是返回fale.
public bool ObjEqualsRight(T obj1, T obj2) { foreach (PropertyInfo property in typeof(T).GetProperties()) { object value1 = property.GetValue(obj1); object value2 = property.GetValue(obj2); if (!value1.Equals(value2))// 这是正确的比较方式 { return false; } } return true; } public bool ObjEqualsWrong(T obj1, T obj2) { foreach (PropertyInfo property in typeof(T).GetProperties()) { object value1 = property.GetValue(obj1); object value2 = property.GetValue(obj2); if (value1!=value2)// 这是错误的比较方式 { return false; } } return true; }

浙公网安备 33010602011771号