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

 

posted @ 2021-09-22 11:35  wzy77cn  阅读(31)  评论(0)    收藏  举报