国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 互联网 > ConvertHelper与泛型集合

ConvertHelper与泛型集合

来源:程序员人生   发布时间:2014-11-08 08:14:28 阅读次数:3233次

            在机房重构时,我们常常会用到ConvertHelper。它把从http://www.wfuyu.com/db/中查询到的dateTable(也是1个临时表)转化为泛型,然后再填充到DataGridView控件中。ConvertHelper类有两点体现了面向对象的思想。1是由于它是常常被使用而被封装起来的类;2是由于它的返回值是泛型集合,泛型集合使存储数据时灵活而安全,也体现了面向对象的思想。


ConvertHelper与sqlHelper

           
           1开始接触ConvertHelper,以为它和sqlHelper1样,后来发现它们由于作用不同援用的命名空间不1样。以下是各个命名空间的含义。

        System

        包括用于定义经常使用值和援用数据类型、事件和事件处理程序、接口、属性和处理异常的基础类和基类。其他类提供支持以下操作的服务:数据类型转换,方法参数操作,数学计算,远程和本地程序调用,利用程序环境管理和对托管和非托管利用程序的监管。 

        System.Data

        包括组成大部份 ADO.NET 结构的类。ADO.NET 结构使您可以生成可用于有效管理来自多个数据源的数据的组件。在断开连接的方案(如 Internet)中,ADO.NET 提供了1些可以在多层系统中要求、更新和调和数据的工具。ADO.NET 结构也能够在客户端利用程序(如 Windows 窗体)或 ASP.NET 创建的 HTML 页中实现。

        System.Configuration 

    命名空间包括具有以下用处的类型:处理配置数据,如计算机或利用程序配置文件中的数据。子命名空间包括具有以下用处的类型:配置程序集,编写组件的自定义安装程序,支持用于在客户端和http://www.wfuyu.com/server/利用程序中添加或删除功能的可插入模型。

       System.Collections

       包括定义各种对象集合(如列表、队列、位数组、哈希表和字典)的接口和类。

       System.Collections.Generic

       包括定义泛型集合的接口和类;泛型集合允许用户创建强类型的集合,这类集合在类型安全和性能上均优于非泛型强类型集合。

        ConvertHelper返回的是泛型集合,所以我们要援用System.Collections.Generic,大大提高效力和安全性能


泛型集合


             泛型集合在学习大话设计模式的时候接触过,这次又重新学习了1遍。数组我们都清楚,用来实现数据的连续存储,其实我们在用vb6敲系统时就用数组,但是数组最大的缺点就是创建时须指定数组变量的大小,在两个元素之间添加元素也比较困难。到了vs平台,就引入了集合、泛型的概念。
             集合简言之,就是能克服上述缺点实现对数据的存储。可根据元素的多少自动重新分配。后来在使用进程中,为了不因调用数据时产生数据类型不同而致使http://www.wfuyu.com/db/的不安全,又引入了泛型。我们的ConvertHelper类返回泛型集合,就是创建强类型的集合。


代码

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 '定义1个临时变量 Dim dr As DataRow '定义行集 '遍历DataTable的所有数据行 For Each dr In dt.Rows Dim myT As New T '创建1个实体类的对象 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) '定义1个对象型的变量来保存列的值 '如果非空,则赋给对象的属性 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




          之前对面向对象的理解是封装、继承、多态,随着1步步的学习,我们还会了解接口、集合、泛型、拜托、客套等1系列概念。它们使程序更安全、灵活……


生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生