重构个人版机房收费(二)——泛型集合
来源:互联网 发布:绵阳鼎盛医疗软件 编辑:程序博客网 时间:2024/04/30 06:10
在上一篇中文章中简单介绍了一下《sqlHelper》,而在这里我再介绍一下关于dataTable转换成实体集合的方法,为什么要介绍一下dataTable转换成实体集合呢?因为在sqlHelper中,我们在对数据库中的数据表进行查询时,返回的是一条记录,而不是一个单个的实体,例如查询操作员工作记录,将查找的信息返回实体时就会报错。如果要是让sqlHelper返回实体的话,那样太麻烦了。如果要返回一个实体的话,我们就要每查询一个新的数据表,就要重新创建一个新的sqlHelper。
解决这个dataTable转换实体的问题——泛型集合
什么叫泛型?泛型有什么好处?
刚接触泛型这个词时,感觉挺深奥的,其实不然它的作用很简单,它为面向对象程序增加了极大的效力和灵活性。不会强行对值类型进行装箱和拆箱,或对引用类型进行向下强制类型转换,所以时程序性能得到提高。
Imports System.Collections.Generic '增加泛型的命名空间,用来管理泛型集合 Imports System.Reflection '加入反射,为了引用 PropertyInfo Public Class GenericEntityHelper '将dataTable中的数据转换为实体集合,其中T为一种类型集合代表,new为约束,在这里使用new关键字的作用只是让编译器在泛型实例化之处,检查所绑定的泛型参数是否具有无参构造函数. Public Shared Function ConvertToList(Of T As New)(dt As DataTable, ts As IList(Of T)) '获得T的类型 Dim type As Type = GetType(T) '定义一个临时变量 Dim strTemp As String = String.Empty '遍历表中所有行数 For Each dr As DataRow In dt.Rows '定义类型变量act获取动态创建对象T的类型。 'Activator.CreateInstance(表示动态创建类对象的, 在运行的时候指定需要需要创建的类型) Dim act As T = If((Nothing Is Nothing), Activator.CreateInstance(Of T)(), Nothing) '引用反射表示可获得对象的所有属性组成的集合 Dim propertys As PropertyInfo() = act.[GetType]().GetProperties() '定义array变量,接收propertys中含有的属性,并提供对属性propertys元数据访问 Dim array As PropertyInfo() = propertys Dim intCount As Integer = 0 '定义一个整型变量 '遍历所有对象属性 While intCount < array.Length 'length表示所有维数中元素的总和 'pr表示元素中含有的属性,并提供对数据访问 Dim pr As PropertyInfo = array(intCount) strTemp = pr.Name '将属性名称赋值给临时变量 '检查DataTable是否包含此列 列名==对象的属性名 If dt.Columns.Contains(strTemp) Then '判断此属性是否设置函数 If pr.CanWrite Then '该属性是否可写 Dim value As Object = dr(strTemp) '如果非空,则赋值给对象的属性 If value IsNot DBNull.Value Then '设置对象的属性值。 pr.SetValue(act, value, Nothing) End If End If End If intCount += 1 '下一个元素 Continue While '执行下一个while循环 End While '添加对象到泛型集合中 ts.Add(act) Next Return ts '返回 End FunctionEnd Class通过泛型的学习,自己深有体会米老师说过的一句话“不怕不知道,就怕不知道”。在学习上遇到新的东西我们要自己去动手实践。不要明知道有这么个东西却怎么也不想去理解它,学习它。最后导致自己真的什么都不知道了。
0 0
- 重构个人版机房收费(二)——泛型集合
- 重构个人版机房收费系统——外观模式
- 重构个人版机房收费系统——sqlhelper
- 重构个人版机房收费系统——视图
- 重构个人版机房收费系统——模板模式
- 重构个人版机房收费系统——sqlHelper
- 机房收费系统个人版重构——报表制作
- 重构个人版机房收费系统—存储过程
- 机房收费系统个人版重构总结
- 【机房收费个人版】DataTable 与泛型集合的较量
- 机房收费系统重构(六)—泛型集合
- 重构个人版机房收费系统——VS添加配置文件
- VB.NET之旅—文本框内字符串的检验(机房收费系统重构个人版)
- 机房收费系统重构(二)—菜鸟入门
- 机房重构(个人版)——类图
- 机房收费系统(个人版)基础知识——ADO.NET
- 个人版机房收费——数据库设计
- 机房收费系统二次重构个人版总结
- 第一个java程序(9x9乘法表)
- 【java项目实践】详解Ajax工作原理以及实现异步验证用户名是否存在+源码下载(java版)
- 哈希表简易入门
- easyui 不适用fit属性让布局在一定宽度自适应,小于此宽度产生滚动条
- 浅谈异常Exception
- 重构个人版机房收费(二)——泛型集合
- 今年暑假数学建模让我们一起加油↖(^ω^)↗
- myeclise10 svn: E210004: Number is larger than maximum 解决方案
- 2014-08-07 日志
- C++设计模式之原型模式(二)
- 【线段树】 HDOJ 4630 No Pain No Game
- java 面向对象的多态性
- 《深度探索c++对象模型》总结
- POJ 3461 Oulipo (KMP)