/// <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); }