C#中反射和泛型的运用

2018-01-08  本文已影响48人  晚幕榴裳

今天在做项目开发的时候,遇到了一个棘手的问题,因为是调用别人的接口返回的数据,订单的可订和预订,其中一部分反序列化以后的内容是相同的,但是因为在不同的class中都做了定义,这样在处理这一部分类型的时候,因为在两个类中,所以就算逻辑是一样的,也没有办法共用同一个方法,这个时候我就想到是否可以把List实体用泛型来实现呢,这样我就定义了一个泛型的方法.但是因为对反射的内容不是很熟悉,导致一直拿不到自己想要的属性结果,也没有办法用lambda表达式对结果集进行过滤。

错误代码尝试:

直接编译都过不了,因为T默认是继承object的,所以我直接拿对应的后面的Charge属性是拿不到的,因为对反射的内容不熟悉,所以一直写不正确,后面看了别人的写法:

大牛给写的例子

看了别人的写法才知道自己写的代码问题所在,做了调整最终实现了功能。

总结:

1.通过反射拿到函数内需要判定的属性

2.判定传进来的泛型是否拥有这个属性只需要判断GetProperty返回的对象是否为空就知道有没有这个属性了

3.通过prop对象的GetValue函数获得指定对象的该属性的值, GetValue第二个参数通常传null, 如果是索引性属性,则传索引值

4. GetValue返回的值就是这个属性在这个对象里的值了, 然后就该做什么就做什么

上一篇 下一篇

猜你喜欢

热点阅读