Esempio n. 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="compareInfo"></param>
        /// <param name="sourceObject"></param>
        /// <param name="targetObject"></param>
        /// <returns></returns>
        public static ObjectCompareResult CompareObject(ObjectCompareInfo compareInfo, object sourceObject, object targetObject)
        {
            compareInfo.NullCheck("compareInfo");

            ObjectCompareResult result = new ObjectCompareResult(compareInfo.ObjectTypeName);

            //如果是同一个对象,则直接返回
            if (object.ReferenceEquals(sourceObject, targetObject))
            {
                return(result);
            }

            foreach (PropertyCompareInfo pci in compareInfo.Properties)
            {
                object sourceValue = GetPropertyValue(sourceObject, pci.PropertyName);
                object targetValue = GetPropertyValue(targetObject, pci.PropertyName);

                if (object.Equals(sourceValue, targetValue) == false)
                {
                    ObjectPropertyCompareResult item = new ObjectPropertyCompareResult(pci, sourceValue, targetValue);

                    if (sourceValue.IsEnumerableObject() || targetValue.IsEnumerableObject())
                    {
                        item.SubObjectCompareResult = CompareEnumerableObject(sourceValue as IEnumerable, targetValue as IEnumerable);
                    }
                    else
                    {
                        item.SubObjectCompareResult = CompareObject(sourceValue, targetValue);
                    }

                    result.Add(item);
                }
            }

            result.Sort((r1, r2) => r1.SortID - r2.SortID);

            return(result);
        }