.net 反射比較屬性值應該總是用Equals而不要用==
阿新 • • 發佈:2021-09-22
.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; }