1. 程式人生 > 其它 >.net 反射比較屬性值應該總是用Equals而不要用==

.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; }