博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
杨过这个月修炼啥武功——反射获取
阅读量:5008 次
发布时间:2019-06-12

本文共 2539 字,大约阅读时间需要 8 分钟。

一、开场白

  一入开发深似海,再回首已非少年!  

  大家看到这个题目表喷我,不要说跟风吸睛(金庸老爷子去世)、标题党;好了,废话先不多说,进入正题。

二、场景描述

  又到华山论剑之期,武林中各路高手为了武林盟主之位也好,天下第一之称也罢,都在进行最后的修炼。为了消除门派之见,允许各位大咖到不同门派修炼,每个门派一个月,限期一年。添加人员安排时,把各路高手错开,列表仅显示当前月所要修炼的门派。

   图文并茂,先简单了解下,大概是先这样,然后那样,然后再这样。。。

1、添加高手高手高高手

 

   第一位是一灯大师,当前是11月份,给一灯大师安排的是峨眉派的“修炼”。其它人员的参看列表,杨过这个月还是修炼“古墓派”的武功。

2、各个人员,修炼门派安排

 

好了,至此,场景介绍完毕。

3、简述下自己用的的表:人员表,门派表,人员门派安排表;每个表和一个实体类对应。人员表,门派表略过,都是姓名,id,创建日期这些基础参数,重点在人员门派安排表。

人员安排表字段:人员id,1月所属门派id,2月所练门派id。。。12月所练门派。参考下图:

 

 三、问题来了

  现在创建的门派人员关系数据已经保存好了,各个月份保存的是一个Guid类型的id。

  按自己一贯的逻辑,搜索数据库,返回列表,循环遍历返回的对象列表,给json对象赋值,返回前端显示,over。等等,这个月是几月?11月,DateTime.Now.Month可以获取到。11月的英文是什么来着?November。嗯,dto.November获取到所属派别的id,再根据此获取门派名称;这样看似没问题,但是问题就出在这里:对象.属性(注意这个点已经加大),这个相当于动态获取对象的属性名称。10月的话应该是dto.October,11月应该是dto.November,当然其它月份又是对应的属性名称。如何动态获取属性名称,并取出对应属性的值呢。

四、反射登场

  针对上面提到的问题,自己用到了枚举:各个月份对应。反射:根据当前月份,取出名称,在从对象中取出对应属性名称的值。代码如下(仅供参考)

枚举类型

1         ///  2         /// 月份 3         ///  4         enum Months 5         { 6             January = 1, 7             February, 8             March, 9             April,10             May,11             June,12             July,13             August,14             September,15             October,16             November,17             Desember18         }
月份

反射实现,这里已经引用了相应的程序集,没有动态添加。

1  ///  2         ///  获取所属考核门派:只显示当前月 3         ///  4         /// 人员 5         /// 门户id,名称字典 6         /// 
7 private string GetOrganization(OrganizationUserDTO dto, Dictionary
dic) 8 { 9 string orgName = "";10 int intMonth = DateTime.Now.Month; //获取当前月11 string strMonth = Enum.GetName(typeof(Months), intMonth); //月份名称12 Type t = dto.GetType();13 System.Reflection.PropertyInfo propertyInfo = t.GetProperty(strMonth);14 Guid value = (Guid)propertyInfo.GetValue(dto, null); //获取属性值15 try16 {17 if (value_Old != Guid.Empty) //初始化时未赋值18 {19 orgName = dic[value];20 }21 }22 catch (Exception ex)23 {24 Guid a = value;25 }26 return orgName;27 }
反射获取属性集合

接下来就是数据绑定,返回前台。

五、简单回顾

1、用到枚举,包括枚举中int和字符串如何转换。

2、反射技术,动态获取属性名称。

六、写在最后

  之前只是知道反射,但是实际工作中并没有用到过,看相关的文章也是云里雾里,或者看过就网了。只有自己实际应用了才会有“原来如此”,豁然开朗的感觉。10月30号当天下午把这个存到了自己草稿箱,未编辑成文,为了避嫌,把实际的代码改成了武侠小说中的门派,人物,恰看到金庸老爷子的新闻,不胜感慨。仅以此文总结下反射,望能帮助那些还在纠结反射的童鞋们。当然,自己才疏学浅,有不足之处,还请各位指出。

转载于:https://www.cnblogs.com/meng9527/p/9881664.html

你可能感兴趣的文章
Thinkphp框架回顾(三)之怎么实现平常的sql操作数据库
查看>>
虚函数的效率问题
查看>>
POJ 1860 Currency Exchange(SPFA 判断有无“正”环)
查看>>
广告地址屏蔽
查看>>
收缩SqlServer数据库日记方法
查看>>
每日英语:15 places to find inspiration
查看>>
学习方法--提问
查看>>
【转】每天一个linux命令(3):pwd命令
查看>>
merge-two-sorted-lists
查看>>
MySQL(3)
查看>>
poj1061——扩展gcd水题
查看>>
UVa400.Unix ls
查看>>
POJ 2299 Ultra-QuickSort 归并排序、二叉排序树,求逆序数
查看>>
Educational Codeforces Round 60 (Rated for Div. 2) C. Magic Ship
查看>>
Windows 2008 R2系统开机时如何不让Windows进行磁盘检测?
查看>>
WP7应用开发笔记(18) 本地化与多语言
查看>>
解决 .so文件64与32不兼容问题
查看>>
归并排序法
查看>>
【剑指offer】面试题26:复杂链表的复制
查看>>
spark开发生成EXE
查看>>