重构个人版机房收费(二)——泛型集合

来源:互联网 发布:绵阳鼎盛医疗软件 编辑:程序博客网 时间: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
原创粉丝点击