根据部分属性来判断俩个对象是否相同
代码是第一版本 可能不牢固 有问题请反馈一下 3QU
效果图:
public static class CustomExpand
{
public static bool CustomEquals<T>(this T t, T t1, params Expression<Func<T, object>>[] ex) where T : class
{
List<string> memberList = new List<string>();
foreach (var item in ex)
{
string memberName = (GetMemberExpression(item.Body)?.Member.Name);
if (!string.IsNullOrEmpty(memberName))
{
memberList.Add(memberName);
}
}
Type type = t.GetType();
while (memberList.Count > )
{
PropertyInfo propertyInfo = type.GetProperty(memberList[]);
switch (propertyInfo.PropertyType.BaseType.FullName)
{
case "System.ValueType":
if (propertyInfo.GetValue(t, null)?.ToString() != propertyInfo.GetValue(t1, null)?.ToString())
{
return false;
}
break;
case "System.Object":
if (SerializerHelper.ToJson(propertyInfo.GetValue(t, null)) != SerializerHelper.ToJson(propertyInfo.GetValue(t1, null)))
{
return false;
}
break;
default:
throw new Exception($"类型:{propertyInfo.PropertyType.BaseType.FullName} 未作处理");
break;
}
memberList.RemoveAt();
}
return true;
}
public static MemberExpression GetMemberExpression(Expression expression)
{
if (expression is MemberExpression)
{
return expression as MemberExpression;
}
if (expression is UnaryExpression)
{
return GetMemberExpression(((UnaryExpression)expression).Operand);
}
return null;
}
}