以前在开发一个系统的时候

小组里的人在写方法的时候很累,很多方法都是对象的属性需要大量的重复赋值,然后 添加到List对象中

你是否还在为一个对象里有几十 上百个属性 手动写代码赋值烦恼呢?

下面是一个以前的读取数据库 信息的例子

public IList<KFS_Model.QAS_V_MessageInfo> PagerTest(string where, KFS_Model.Pager p){SqlDataReader dr = null;string table = "QAS_V_MessageInfo";string orderby = "QuestionTime";IList<KFS_Model.QAS_V_MessageInfo> list = new List<KFS_Model.QAS_V_MessageInfo>();Pagination.page(table, where, orderby, true,p);dr = Pagination.page(table, where, orderby, false, p);while (dr.Read()){KFS_Model.QAS_V_MessageInfo qas = new KFS_Model.QAS_V_MessageInfo();qas.UserId = dr.GetGuid(1);qas.UserName = dr.GetString(2);qas.SonModelId = dr.GetGuid(3);qas.SonModelName = dr.GetString(4);qas.QuestionId = dr.GetGuid(5);qas.QuestionTitle = dr.GetString(6);qas.QuestionUrl = dr.GetString(7);qas.QuestionTime = dr.GetDateTime(8);qas.QuestionSession = dr.GetInt32(9); qas.QuestionContent = dr.GetString(10);qas.FatherModelId = dr.GetGuid(11);list.Add(qas);}return list;            }

赋值语句占了方法的一半

而且写起来还要一个一个的对照

很郁闷的说

下面就是我今天公布的源码  无任何版权  欢迎转载

首先构造一个泛型类

public class ClassName<T>

{

}

然后定义一个方法 方法返回集合

    public class Class1<T>{public IList<T> GetData(SqlDataReader reader){IList<T> list = new List<T>();Type type = typeof(T);PropertyInfo[] properties = type.GetProperties();while (reader.Read()){T t = Activator.CreateInstance<T>();for (int i = 0; i < properties.Length; i++){properties[i].SetValue(t, reader[i + 1], null);}list.Add(t);}return list;}}

上面给出了核心代码 如果你要传递sql语句

那你的业务逻辑层 就要这一个方法也就够了!

下面一个扩展方法 由 论坛的sql1234提供 在一次感叹 linq语法的简洁

public static IEnumerable<T> GetObjects<T>(this DbDataReader rd) where T : new()
{var fs = (from fd in typeof(T).GetFields()let desc = new { field = fd, index = rd.GetOrdinal(fd.Name) }where desc.index >= 0select desc).ToList();foreach (var x in rd){var obj = new T();fs.ForEach(d => { d.field.SetValue(obj, rd[d.index]); });yield return obj;}
}

这里,我们通过扩展方法,为任意DbDataReader都增加了一个GetObjects方法,返回任意指定类型的强类型的对象集合。
如果包括private的field才更完整。应该将 GetFields() 修改为
GetFields(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic)

转载于:https://www.cnblogs.com/gxy217/archive/2012/06/12/2546858.html

让你省写大量重复代码的方法 使用PropertyInfo类 反射获取类 的类型 .相关推荐

  1. python测试代码怎么写_python测量代码运行时间方法

    Apple iPhone 11 (A2223) 128GB 黑色 移动联通电信4G手机 双卡双待 4999元包邮 去购买 > Python 社区有句俗语: "python自己带着电池& ...

  2. java 反射 获取 实例_java通过类反射获取某个类的所有信息--代码实例

    package huang.de.wei; import java.lang.annotation.Annotation; import java.lang.reflect.Constructor; ...

  3. java 反射 new class_Java高级特性-反射:不写死在代码,还怎么 new 对象?

    反射是 Java 的一个高级特性,大量用在各种开源框架上. 在开源框架中,往往以同一套算法,来应对不同的数据结构.比如,Spring 的依赖注入,我们不用自己 new 对象了,这工作交给 Spring ...

  4. 从阿里跳槽来的工程师,分享了三套干掉 “重复代码”方式,真的太绝了!

     附:糖豆广场舞永久会员TV版 软件工程师和码农最大的区别就是平时写代码时习惯问题,码农很喜欢写重复代码而软件工程师会利用各种技巧去干掉重复的冗余代码. 业务同学抱怨业务开发没有技术含量,用不到设计模 ...

  5. 写代码犹如写文章: “大师级程序员把系统当故事来讲,而不是当做程序来写” | 如何架构设计复杂业务系统? 如何写复杂业务代码?

    写代码犹如写文章: "大师级程序员把系统当故事来讲,而不是当做程序来写" | 如何架构设计复杂业务系统? 如何写复杂业务代码? Kotlin 开发者社区 "大师级程序员把 ...

  6. 多元线性回归算法python实现_手写算法-Python代码推广多元线性回归

    1.梯度下降-矩阵形式 上篇文章介绍了一元线性回归,包括Python实现和sklearn实现的实例.对比,以及一些问题点,详情可以看这里: 链接: 手写算法-Python代码实现一元线性回归 里面封装 ...

  7. 【满分】【华为OD机试真题2023 JAVAJS】查找重复代码

    华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里 查找重复代码 时间限制:1s 空间限制:32MB 限定语言:不限 题目描述: 小明负责维护项目下的代码,需要查找出重复代码,用以支撑后续的 ...

  8. 重复代码 Duplicated Code

    重复代码的影响:程序中到处都是相同结构的表达式.若想修改此表达式,需要修改多个地方. 目标:相同表达式合并成一起,避免多处修改.降低修改成本. 常见以下几种: 1.同一个类有相同的表达式 2.两个类有 ...

  9. 老司机写的java代码_老司机告诉你高质量的Java代码是怎么练成的?

    一提起程序员,首先想到的一定是"码农",对,我们是高产量的优质"码农",我们拥有超跃常人的逻辑思维以及不走寻常路的分析.判别能力,当然,我们也有良好的编码规范, ...

最新文章

  1. Pandas Cheat Sheet
  2. PostgreSQL-数据复制
  3. python画图比赛_Python选修课第二届Turtle绘图大赛
  4. LeetCode 669. Trim a Binary Search Tree
  5. 手把手教你在友善之臂tiny4412上用uboot启动Linux内核
  6. vb代码转换为java_有人可以解释如何使用JACOB将VB代码转换为Java吗?
  7. OpenWrt 固件定制
  8. MATLAB人脸识别区域定位实战源码解析
  9. 小白入门之海康威视摄像机的二次开发
  10. Windows 7 多国语言包(MUI)
  11. 万王之王显示服务器尚未对外开放,《万王之王3》公测5月26日火爆开启 姚星彤性感代言...
  12. linux系统内存执行elf的多种方式(内存马)
  13. (statistic)你所不知道的P值--对统计学的批判
  14. 数据分析试题集+答案
  15. 程序员编程入门一定知道!程序员需要学什么?
  16. win10系统C盘突然红了爆满占了170G找了几天怎么也找不到哪个文件占用这么多磁盘空间
  17. 在线工具:电脑怎么提取图片中的文字?图片如何转化为文字?
  18. 暴力更改hex文件实现自动烧写stm32程序
  19. 第一章 操作系统引论之多道批处理系统
  20. Teams app 的 SSO 机制

热门文章

  1. php输出查询mysql中文乱码_解决php mysql查询插入中文乱码问题
  2. Vue.extend
  3. 手机端适应_不轻易透露的超强技巧!详解iVX中怎样做设备自适应
  4. springboot redis 断线重连_Redis的主从复制是如何做的?复制过程中也会产生各种问题?...
  5. mac 上安装Homebrew
  6. mybatis没有clob类型_mybatis将Oracle的Clob类型转成String的方法
  7. python新建文件夹口令_Python 口令保管箱
  8. 如何保存一个函数_如何表达一个“分段函数”之学习Matlab Function模块
  9. 矩阵的秩到底描述了什么?
  10. 新一代 Python 包管理工具来了!