重构——DataTable转泛型
来源:互联网 发布:关于编程的书 编辑:程序博客网 时间:2024/04/28 13:04
泛型简介
泛型可以最大限度的重用代码、保护类型的安全、提高性能。
泛型最常见的用途是创建集合类
泛型数据类型中使用的信息可在运行时通过反射获取。
可以创建自己的泛型接口、泛型类、泛型方法、泛型事件、泛型委托。
个人理解
我所使用使用的泛型是一个list<>集合,只是集合中的每一个元素都是一个实体,而每一个实体都相当于DataTable中的一条记录。DataTable是多条记录的集合,而list<>是多个实体的集合。
什么要转泛型?
1、list<T>遍历方便,取到的都是单个的实体。
2、减少输入,只需要传一个实例T就可以获取它的任何属性。
3、正确的构建泛型类,可以减少代码中的安全问题。
4、泛型确保了在工作量最小的情况下,为应用程序提供最佳的性能。
泛型实例
以充值为例,实战一下将DataTable转换为泛型,首先我们在D层创建一个类ConverHelper,用于将DataTable转换为泛型。
<span style="font-size:18px;"><strong>Imports System.Reflection '引用反射Imports System.Collections.GenericModule ConverHelper Public Class ConverHelper 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的类型 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 '列名=对象的属性名 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 End While '添加对象到泛型集合中 ts.Add(act) Next Return ts End Function End ClassEnd Module</strong></span>
D层中充值窗体调用这个类
<span style="font-size:18px;"><strong> dt = sqlhelper.ExecSelect(str, CommandType.Text, sqlparamsnew) If (dt.Rows.Count > 0) Then list = ConverHelper.ConverHelper.ConvertToList(dt, list) Return list Else Throw New Exception("没有记录!") End If</strong></span>
此时,D层的返回值类型
<span style="font-size:18px;"><strong> List(Of Entity.RechargeEntity)</strong></span>
其实当我们接触一些新东西的时候,它可能并没有想象中的那么难,只要去做就可以了。
2 0
- 重构——DataTable转泛型
- 【机房重构】——DataTable转泛型
- 机房重构——DataTable转泛型
- 机房重构——DataTable转泛型
- 机房收费系统重构——Datatable转泛型
- 【机房重构】——DataTable和泛型集合
- 机房重构——泛型 or DataTable?
- 机房重构——泛型和“DataTable”
- 机房重构——Datatable与泛型
- 机房重构之DataTable转泛型
- 机房重构-七层登录中(Datatable转泛型)
- 【个人机房重构】——泛型集合代替DataTable
- 重构小结——从传参到传实体,从datatable到泛型
- 机房重构——透过实践看Datatable和泛型
- 个人机房重构——DataTable与泛型的应用
- 【机房重构】泛型与Datatable
- 【机房重构】-泛型与datatable
- DataTable排序,去重
- Android关于Theme.AppCompat相关问题的深入分析
- CEF中禁止弹出浏览器窗口
- 新的一年正式开始
- 框架编写之聊天框架认识(二)
- Android学习概述
- 重构——DataTable转泛型
- MinGW安装
- 如何禁止App在后台运行以及如何保存和恢复App的状态
- 更新NCBI中taxdmp数据
- bzoj2882 工艺
- poj 1716(贪心)
- usaco training 1.3奶牛回文
- CSS基础研究(一)-各种各样的选择器
- JAVA安装——Windows