private static bool AssertFields(FieldInfo[] obj1Fields, object obj1, FieldInfo[] obj2Fields, object obj2) { foreach (var field in obj1Fields) { if (!obj2Fields.Contains(field)) return false; if ((field.FieldType.IsValueType || field.FieldType.IsAssignableFrom(typeof(Nullable)))&& Object.Equals(field.GetValue(obj1), field.GetValue(obj2))) { continue; } if (field.FieldType == typeof(string) && string.Equals(field.GetValue(obj1), field.GetValue(obj2))) { continue; } if (field.FieldType.IsClass && DeepEqual(field.GetValue(obj1), field.GetValue(obj2))) { continue; } return false; } return true; }