namespace Verify { public static class ClassUpdateVailDataHelper { /// /// 反射对比实体属性变更 /// /// public static class CompareEntry { /// /// 编辑之前的对象和编辑后的对象进行对比 /// /// public static bool CompareDTO(T BeforeDTO, T AfterDTO) { bool IsEqual = true; if (BeforeDTO == null || AfterDTO == null) { IsEqual = false; } else if (BeforeDTO.Equals(DBNull.Value) || AfterDTO.Equals(DBNull.Value)) { IsEqual = false; } else if (BeforeDTO.GetType() != AfterDTO.GetType()) { IsEqual = false; return IsEqual; } else if (BeforeDTO is int || BeforeDTO is short || BeforeDTO is long || BeforeDTO is float || BeforeDTO is double || BeforeDTO is decimal) { //int 01与1 if (BeforeDTO is int) { if (Convert.ToInt32(BeforeDTO) != Convert.ToInt32(AfterDTO)) { IsEqual = false; } } else if (BeforeDTO is short) { if (Convert.ToInt16(BeforeDTO) != Convert.ToInt16(AfterDTO)) { IsEqual = false; } } else if (BeforeDTO is long) { if (Convert.ToInt64(BeforeDTO) != Convert.ToInt64(AfterDTO)) { IsEqual = false; } } else if (BeforeDTO is float) { if (Convert.ToSingle(BeforeDTO) != Convert.ToSingle(AfterDTO)) { IsEqual = false; } } else if (BeforeDTO is double) { if (Convert.ToDouble(BeforeDTO) != Convert.ToDouble(AfterDTO)) { IsEqual = false; } } else if (BeforeDTO is decimal) { if (Convert.ToDecimal(BeforeDTO) == Convert.ToDecimal(AfterDTO)) { IsEqual = false; } } } else { var beforeMembers = BeforeDTO.GetType().GetProperties(); var afterMembers = AfterDTO.GetType().GetProperties(); for (int i = 0; i < beforeMembers.Length; i++) { var beforeVal = beforeMembers[i].GetValue(BeforeDTO, null); var afterVal = afterMembers[i].GetValue(AfterDTO, null); var beforeValue = beforeVal == null ? null : beforeVal.ToString(); var afterValue = afterVal == null ? null : afterVal.ToString(); if (beforeValue != afterValue) { IsEqual = false; break; } } } return IsEqual; } } } }