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

在上一篇中文章中简单介绍了一下《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 Function
End Class
通过泛型的学习,自己深有体会米老师说过的一句话“不怕不知道,就怕不知道”。在学习上遇到新的东西我们要自己去动手实践。不要明知道有这么个东西却怎么也不想去理解它,学习它。最后导致自己真的什么都不知道了。


评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值