根据部分属性来判断俩个对象是否相同

代码是第一版本 可能不牢固 有问题请反馈一下 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;
}
}

C# 根据部分属性来判断俩个对象是否相同的更多相关文章

  1. 如何通过源生js获取一个元素的具体样式值 /* getCss:获取指定元素的具体样式的属性值 curElement:[dom对象] attr:[string] */

    昨天的博客些的真的是惨不忍睹啊!!!但是我的人生宗旨就是将不要脸的精神进行到底,所以,今天我又来了.哈哈哈哈哈! 方法一:元素.style.属性名:(这个有局限性--只能获取行内样式的值,对于样式表或 ...

  2. Document-对象属性和常用的对象方法

    Document-对象属性和常用的对象方法 对象属性 document.title                           //设置文档标题等价于HTML的title标签 document ...

  3. #8.10.16总结# 属性选择符 伪对象选择符 CSS的常用样式

    属性选择符 E[att] E[att="val"] E[att~="val"] E[att^="val"] E[att$="val ...

  4. Spring IOC 容器源码分析 - 填充属性到 bean 原始对象

    1. 简介 本篇文章,我们来一起了解一下 Spring 是如何将配置文件中的属性值填充到 bean 对象中的.我在前面几篇文章中介绍过 Spring 创建 bean 的流程,即 Spring 先通过反 ...

  5. JSP中scope属性 scope属性决定了JavaBean对象存在的范围

    scope属性决定了JavaBean对象存在的范围. scope的可选值包括: ---page(默认值) ---request ---session ---application   1.page范围 ...

  6. constructor 属性返回变量或对象的构造函数。判断是否为日期,数组的例子

    constructor 属性返回变量或对象的构造函数. <!DOCTYPE html> <html> <head> <meta charset="u ...

  7. C# 中利用反射机制拷贝类的字段和属性(拷贝一个类对象的所有东西付给另一个类对象,而不是付给引用地址)

    from:https://blog.csdn.net/poxiaohai2011/article/details/27555951 //C# 中利用反射机制拷贝类的字段和属性(拷贝一个类对象的所有东西 ...

  8. 为什么实例没有prototype属性?什么时候对象会有prototype属性呢?

    为什么实例没有prototype属性?什么时候对象会有prototype属性呢? javascript loudou 1月12日提问 关注 9 关注 收藏 6 收藏,554 浏览 问题对人有帮助,内容 ...

  9. iOS Category 添加属性实现原理 - 关联对象

    iOS Category 添加属性实现原理 - 关联对象 RunTime为Category动态关联对象 使用RunTime给系统的类添加属性,首先需要了解对象与属性的关系.对象一开始初始化的时候其属性 ...

随机推荐

  1. JS列表

    promise 引用类型/值类型 ----- 对比python可变对象/不可变对象 原型继承

  2. [20180123]测试SQLNET.EXPIRE_TIME参数.txt

    [20180123]测试SQLNET.EXPIRE_TIME参数.txt --//曾经写过一篇linux内核网络参数测试tcp_keepalive,链接http://blog.itpub.net/26 ...

  3. VisualStudio编译项目时,提示bin目录和obj目录下的文件不能写的错误处理的解决办法

    具体错误信息如下: Error 139 Could not write lines to file "obj\Debug\SanSuiWeb.csproj.FileListAbsolute. ...

  4. shell 的条件表达式及逻辑操作符简单介绍

    查看系统的shell: cat /etc/shells 文件测试表达式: -f 文件  文件存在且为普通文件则真,即测试表达式成立. -d 文件  文件存在且为目录文件则真,即测试表达式成立. -s ...

  5. Dos命令讲解

    目录 一.什么是DOS 二.启动DOS的多种方法 三.DOS的内部命令与外部命令 四.系统环境变量讲解 增加Path环境变量路径 常见的系统环境变量 五.常用的运行命令 六.DOS使用技巧 设置CMD ...

  6. jQuery实现全选/反选和批量删除

    <%@ page language="java" contentType="text/html; charset=utf-8"     pageEncod ...

  7. 从头学Android之RelativeLayout相对布局

    http://blog.csdn.net/worker90/article/details/6893246 相对布局对于做Web开发来说再熟悉不过了,我们在用CSS+DIV的时候经常会用到这些类似的相 ...

  8. API--ResponseBody-类

    import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInc ...

  9. Iris框架源码阅读和分析

    iris包结构简介 iris包含了很多包,下面这些是分析过程中接触到的东西. 能力有限,多多包涵,欢迎联系QQ:2922530320 一起交流 context包包含: Context (接口) con ...

  10. UVA10129-Play on Words(欧拉路径)

    Problem UVA10129-Play on Words Accept: 2534  Submit: 19477 Time Limit: 3000 mSec Problem Description ...