通过反射填充泛型集合List的静态方法

2016-02-19 20:13 20 1 收藏

下面,图老师小编带您去了解一下通过反射填充泛型集合List的静态方法,生活就是不断的发现新事物,get新技能~

【 tulaoshi.com - Web开发 】

  呃```花了一晚上时间,终于搞出来了如何通过反射,从DataReader将数据填充到数据实体泛型集合的静态方法.

   

  //Kchen.Core.BaseBusinessObject为通用数据实体类,此处仅为限定T所继承的类型
          public static IListT FillDataListGenericT(System.Data.IDataReader reader) where T : Kchen.Core.BaseBusinessObject
          {
              //实例化一个List泛型集合
              IListT DataList = new ListT();
              while (reader.Read())
              {
                  //由于是是未知的类型,所以必须通过Activator.CreateInstanceT()方法来依据T的类型动态创建数据实体对象
                  T RowInstance = Activator.CreateInstanceT();
                  //通过反射取得对象所有的Property
                  foreach (PropertyInfo Property in typeof(T).GetProperties())
                  {
                      //BindingFieldAttribute为自定义的Attribute,用于与数据库字段进行绑定
                      foreach (BindingFieldAttribute FieldAttr in Property.GetCustomAttributes(typeof(BindingFieldAttribute), true))
                      {
                          try
                          {
                              //取得当前数据库字段的顺序
                              int Ordinal = reader.GetOrdinal(FieldAttr.FieldName);
                              if (reader.GetValue(Ordinal) != DBNull.Value)
                              {
                                  //将DataReader读取出来的数据填充到对象实体的属性里
                                  Property.SetValue(RowInstance, Convert.ChangeType(reader.GetValue(Ordinal), Property.PropertyType), null);
                              }
                          }
                          catch
                          {
                              break;
                          }
                      }
                  }
                  //将数据实体对象add到泛型集合中
                  DataList.Add(RowInstance);
              }
              return DataList;
          }
  调用的时候使用如下代码

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

              //伪代码 OleDbDataReader _ds = 创建一个OleDbDataReader
              IListProduct _result = Kchen.Utilities.FillDataListGenericProduct(_ds);

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

  此静态方法通过一个实体类型和DateReader,快速的将数据填充到数据实体泛型集合中.

  http://www.cnblogs.com/kchen/archive/2006/10/31/545011.html

来源:https://www.tulaoshi.com/n/20160219/1623035.html

延伸阅读
泛型编程:再现Min和Max 作者: Andrei Alexandrescu(陶章志译) 原文出处:http://www.cuj.com/documents/s=7996/cujcexp1904alexandr/ 在1995年1月,Scott Meyers 在C++ Report杂志上就强调"min,max 对C++社团来说是一个很大的挑战",他对基于macro-based实现的min,max进行认真的分析,...
解读宝宝的原始反射动作 1、贪吃百分百的吸吮反射 其实, 胎儿 在妈妈肚子里的时候,为了出生后立即能吸奶,嘴巴已开始运动,以练习吸吮能力。出生后,如果妈妈将手指放入 宝宝 的口中,他会自然地吸吮,而且也常会吸吮自己的手,甚至直接吸吮接触到嘴唇的东西。练绍弘医生表示,宝宝的吸吮能力佳,摄...
前言 永远记住,编写代码的宗旨在于简单明了,不要使用语言中的冷僻特性,耍小聪明,重要的是编写你理解的代码,理解你编写的代码,这样你可能会做的更好。    --- Herb Sutter !-- frame contents -- !-- /frame contents -- 1998年,国际C++标准正式通过,标准化对C++最重要的...
Boost中应用的泛型编程技术 作者:David Abrahams 提交者:eastvc 发布日期:2003-9-20 10:16:13 原文出处:http://www.cpphelp.net/issue/gpt.html 译者:Merlin Ran 英文原文: http://www.boost.org/more/generic_programming.html 1、何谓泛型编程 泛型编程(Generic Programming)关注于产生通用的软件组件,让这些组件在不同的...
最近频繁的接触到泛型方面的问题,所以也不得不来学习一下了,开始主要是在MSDN的WebCast上去下载教学录象看的(李建忠老师的),本篇文章先介绍一下泛型入门方面的知识,希望能让刚开始学习泛型的朋友能够更快的入门,言归正传,首先我们来看一下泛型的基本概念。 最显著的一点就是它参数化了类型,把类型作为参数抽象出来,从而使我们在...

经验教程

930

收藏

79
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部