今天在做项目开发的时候,遇到了一个棘手的问题,因为是调用别人的接口返回的数据,订单的可订和预订,其中一部分反序列化以后的内容是相同的,但是因为在不同的class中都做了定义,这样在处理这一部分类型的时候,因为在两个类中,所以就算逻辑是一样的,也没有办法共用同一个方法,这个时候我就想到是否可以把List实体用泛型来实现呢,这样我就定义了一个泛型的方法.但是因为对反射的内容不是很熟悉,导致一直拿不到自己想要的属性结果,也没有办法用lambda表达式对结果集进行过滤。
错误代码尝试:
直接编译都过不了,因为T默认是继承object的,所以我直接拿对应的后面的Charge属性是拿不到的,因为对反射的内容不熟悉,所以一直写不正确,后面看了别人的写法:
大牛给写的例子
看了别人的写法才知道自己写的代码问题所在,做了调整最终实现了功能。
总结:
1.通过反射拿到函数内需要判定的属性
2.判定传进来的泛型是否拥有这个属性只需要判断GetProperty返回的对象是否为空就知道有没有这个属性了
3.通过prop对象的GetValue函数获得指定对象的该属性的值, GetValue第二个参数通常传null, 如果是索引性属性,则传索引值
4. GetValue返回的值就是这个属性在这个对象里的值了, 然后就该做什么就做什么