ConvertHelper与泛型集合
在机房重构时。我们常常会用到ConvertHelper。
它把从数据库中查询到的dateTable(也是一个暂时表)转化为泛型,然后再填充到DataGridView控件中。
ConvertHelper类有两点体现了面向对象的思想。一是由于它是常常被使用而被封装起来的类。二是由于它的返回值是泛型集合,泛型集合使存储数据时灵活而安全,也体现了面向对象的思想。
ConvertHelper与sqlHelper
下面是各个命名空间的含义。
System
包括用于定义经常使用值和引用数据类型、事件和事件处理程序、接口、属性和处理异常的基础类和基类。其它类提供支持下列操作的服务:数据类型转换,方法參数操作,数学计算,远程和本地程序调用,应用程序环境管理以及对托管和非托管应用程序的监管。
System.Data
包括组成大部分 ADO.NET 结构的类。ADO.NET 结构使您能够生成可用于有效管理来自多个数据源的数据的组件。在断开连接的方案(如 Internet)中。ADO.NET 提供了一些能够在多层系统中请求、更新和协调数据的工具。ADO.NET 结构也能够在client应用程序(如 Windows 窗口)或 ASP.NET 创建的 HTML 页中实现。
System.Configuration
命名空间包括具有下面用途的类型:处理配置数据,如计算机或应用程序配置文件里的数据。子命名空间包括具有下面用途的类型:配置程序集,编写组件的自己定义安装程序。支持用于在client和server应用程序中加入或删除功能的可插入模型。
System.Collections
包括定义各种对象集合(如列表、队列、位数组、哈希表和字典)的接口和类。
System.Collections.Generic
包括定义泛型集合的接口和类;泛型集合同意用户创建强类型的集合,这样的集合在类型安全和性能上均优于非泛型强类型集合。
ConvertHelper返回的是泛型集合。所以我们要引用System.Collections.Generic,大大提高效率和安全性能
泛型集合
代码
Imports System.Collections.Generic '加入反省集合的命名空间
Imports System.Reflection '加入反射的命名空间 Public Class ConvertHelper
'将DataTable转化为泛型集合
Public Shared Function ConvertTolist(Of T As New)(ByVal dt As DataTable) As IList(Of T)
Dim myList As List(Of T) = New List(Of T)() '定义放回的集合
Dim myType As Type = GetType(T) '得到实体类的类型名
Dim tempName As String = String.Empty '定义一个暂时变量
Dim dr As DataRow '定义行集 '遍历DataTable的全部数据行
For Each dr In dt.Rows
Dim myT As New T '创建一个实体类的对象
Dim arrayPi As PropertyInfo() = myT.GetType().GetProperties() '定义属性集合
Dim pi As PropertyInfo '遍历pi对象的全部属性
For Each pi In arrayPi
tempName = pi.Name '将属性名称复制给暂时变量
'检查DataTable是否包括此列(列名==对象的属性名)
If (dt.Columns.Contains(tempName)) Then '将此属性与DataTable里的列名比較
'推断此属性是否有setter
If (pi.CanWrite = False) Then '推断此属性是否可写。假设不可写,跳出本次循环
Continue For End If Dim value As Object = dr(tempName) '定义一个对象型的变量来保存列的值 '假设非空。则赋给对象的属性
If (value.ToString() <> DBNull.Value.ToString()) Then
pi.SetValue(myT, value, Nothing)
End If
End If Next myList.Add(myT) '加入到集合
Next
Return myList '返回实体集合
End Function
End Class
总结
ConvertHelper与泛型集合的更多相关文章
- 使用泛型集合取代datatable作为返回值实现面向对象
开会的时候,师父说.我们在机房重构时,尽量不要用datatable作为返回值.改用泛型集合的方式,这样能够实现真正的面向对象. 通过查资料和同学交流,把这个问题给攻克了. 对于泛型集合.我也有了一些认 ...
- C# DataSet装换为泛型集合
1.DataSet装换为泛型集合(注意T实体的属性其字段类型与dataset字段类型一一对应) #region DataSet装换为泛型集合 /// <summary> /// 利用反射和 ...
- Linq操作非泛型集合
我们都知道,Linq能查询泛型集合,确切的说是:LINQ能实现查询泛型对象或者实现了IEnumerable.但是,很遗憾的是诸如ArrayList这样的非泛型集合并没有实现IEnumerable.那咋 ...
- c#利用泛型集合,为自己偷偷懒。
有人说"越懒"的程序员进步的越快!其实还挺有道理.亲身体验,从刚出来工作到现在,自己变"懒"了许多,但感觉写出来的代码确有了不少提升.刚开始啊,同样的代码,赋值 ...
- 2016年11月27日--面向对象:多态、类库、委托、is和as运算符、泛型集合
1.虚方法 virtual 重写 override 父类中的方法,在子类中并不适用,那么子类需要自主更改继承的方法或者是属性,那父类中加了virtual关键字的方法才可以被子类重写,子类重写父类的方法 ...
- GsonUtils.getGson().fromJson() 转泛型集合
List<QiTaFree> qiTaFreeList = GsonUtils.getGson().fromJson(exhiMain.getQiTaFressJson(), new Ty ...
- 快速入门系列--CLR--03泛型集合
.NET中的泛型集合 在这里主要介绍常见的泛型集合,很多时候其并发时的线程安全性常常令我们担忧.因而简述下.NET并发时线程安全特性,其详情请见MSDN. 普通集合都不支持多重并发写操作 部分支持单线 ...
- 类库,委托,as.is,var,泛型集合
类库: 就是让别人调用你写的方法,并且不让别人看到你是怎么实现的.(比如说一些核心文件) 如果有功能你不会做,需要别人帮忙,那么你的同事可以帮你写好一个类,然后你来调用这个类中的方法,完成你的项目. ...
- 面向对象——is和as运算符、泛型集合 List<T>
二:is和as运算符: (1) is运算符 is 运算符用于检查对象是否与给定类型兼容.如果兼容返回true,否则返回false; 一般用于查看某个类是否实现了某个接口,或者是不是某个类的子类; 例如 ...
随机推荐
- Struts2的struts.properties文件在哪儿啊?
老师教我们Struts2的时候叫我们建了个Struts.xml文件啊?那struts.properties呢?不需要吗? 回答1: struts.properties 是可以不要的!!!因为 stru ...
- WCF 学习总结2 -- 配置WCF
前面一篇文章<WCF 学习总结1 -- 简单实例>一股脑儿展示了几种WCF部署方式,其中配置文件(App.config/Web.config)都是IDE自动生成,省去了我们不少功夫.现在回 ...
- spring的三种注入方式
接口注入(不推荐) 构造器注入(死的应用) getter,setter方式注入(比较常用) Type1 接口注入 我们常常借助接口来将调用者与实现者分离.如: public class ClassA ...
- POJ 3107-Godfather(树形dp)
题意: 有n个节点的树,删除一个点,得到的最大联通分支最小,求这样点的集合 分析: dp[i]表示删除i所得最大联通分支,遍历一遍节点即可,该题用vector会超时 #include <map& ...
- 记录一次Jmeter性能测试
一.引言 之前有总结过如何写Java请求测试用例类,写完测试脚本调通之后,信心满满地以为我准备好可以开始性能测试了.结果在评审测试计划的时候,当即被项目组狠狠的扇了一耳光,各种不确定的点:性能指标不明 ...
- 第一个App“今日材料报价”上架,记录一下【原】
App Store地址:https://itunes.apple.com/us/app/jin-ri-cai-liao-bao-jia/id967274552?l=zh&ls=1&mt ...
- C# Debug与release之间的一些小差异
如果代码声明了一个变量,后面却没有用到, 生成方式debug模式下,这个变量的值存在,调试过程中是可以看到的, 生成方式release模式下,编译时经过了优化,这个值在调试过程就看不到了
- USB模式安装CentOS6.4_minimal
首先说明一下我遇到的3个问题 1. 由于机器没有光驱,所以只能USB安装 2.由于CentOS5.0+才对USB安装支持比较好,所以USB安装,建议安装CentOS5.0+以上的版本 3.由于FAT3 ...
- Error starting static Resources java.lang.IllegalArgumentException: Document base D:\Program Files\apache-tomcat-xxx\webapps\xxx does not exist or is not a readable directory
网上的答案大多数如下: 但并没有解决我的问题 经过我的观察: 在tomcat的server.xml有Lottery项目描述,但实际上,该项目已被我删除,不存在于webapps中了 该行Cont ...
- Android-Native-Server 启动和注册详细分析
Android-Native-Server 启动和注册详细分析 以mediaService为实例来讲解: mediaService的启动入口 是一个 传统的 main()函数 源码位置E:\ ...