重构——DataTable转泛型
泛型简单介绍
泛型能够最大限度的重用代码、保护类型的安全、提高性能。
泛型最常见的用途是创建集合类
泛型数据类型中使用的信息可在执行时通过反射获取。
能够创建自己的泛型接口、泛型类、泛型方法、泛型事件、泛型托付。
个人理解
我所使用使用的泛型是一个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.Generic
Module 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 Class
End 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>
事实上当我们接触一些新东西的时候,它可能并没有想象中的那么难,仅仅要去做就能够了。
重构——DataTable转泛型的更多相关文章
- [工具类]DataTable与泛型集合List互转
写在前面 工作中经常遇到datatable与list,对于datatable而言操作起来不太方便.所以有的时候还是非常希望通过泛型集合来进行操作的.所以这里就封装了一个扩展类.也方便使用. 类 方法中 ...
- DataReader,DataTable利用泛型填充实体类
using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <summary ...
- DataTable转实体Model,DataRow转实体Model,DataTable转泛型T,DataRow转泛型T
前言,此方法利用反射将DataRow转成实体,由于反射性能不行,大家就看看就行了吧. 代码来啦 using System; using System.Collections.Generic; usin ...
- 把DataTable转换为泛型List<T>或是JSON
在开发ASP.NET Web API或ASP.NET MVC时,我们从数据库得到的数据往往是DataSet或是DataTable.为了能让前端JQuery能方便使用至这些数据,我们需要把这些数据转换为 ...
- DataTable转泛型List
在.net项目研发过程中,有时候需要将从数据库中获取的DataTable数据类型,转换为泛型集合,然后运用LINQ对集合进行操作,我将此总结一下,方便你我他. 核心类: public class Da ...
- C#中DataTable与泛型集合互转(支持泛型集合中对象包含枚举)
最近在做WCF,因为是内部接口,很多地方直接用的弱类型返回(DataSet),这其实是一种非常不好的方式,最近将项目做了修改,将所有接口返回值都修改成强类型,这样可以减少很多与客户端开发人员的沟通,结 ...
- C#如何根据DataTable生成泛型List或者动态类型list
背景:在项目中,sql语句检索返回DataTable,然后根据检索结果做进一步的操作,本篇文章即是介绍如何将DataTable快速生成泛型List返回. 假设存在如下学生类: public class ...
- 机房重构——泛型和“DataTable”
前言 我们都知道在机房重构的时候,大多数都在用七层进行重构,每一层都依赖实体.所以不管怎么调用,返回的应该是实体参数,这样才符合大多数的逻辑,这样我们试想一下,如果我们要求在U层返回多个实体值,怎么办 ...
- List泛型与DataTable相互转换
public static class ExtensionMethods{/// <summary>/// 将List转换成DataTable/// </summary>/// ...
随机推荐
- 48.Cookie 管理
转自:http://www.runoob.com/nodejs/nodejs-express-framework.html 我们可以使用中间件向 Node.js 服务器发送 cookie 信息,以下代 ...
- 51Nod 飞行员配对(二分图最大匹配)(匈牙利算法模板题)
第二次世界大战时期,英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2名飞行员,其中1名是英国飞行员,另1名是外籍飞行员.在众多的飞行员中, ...
- WinForm无边框窗体移动方法
C#WinForm无边框窗体移动方法.模仿鼠标单击标题栏移动窗体位置 这里介绍俩种办法 方法一:直接通过修改窗体位置从而达到移动窗体的效果 方法二:直接伪装发送单击任务栏消息,让应用程序误以为单击任务 ...
- ActiveMQ学习总结(2)——ActiveMQ入门实例教程
1.下载ActiveMQ 去官方网站下载:http://activemq.apache.org/ 2.运行ActiveMQ 解压缩apache-activemq-5.5.1-bin.zip,然后双击a ...
- VS:"64位调试操作花费的时间比预期要长"的一解决途径
解决的方法之中的一个: 在命令提示符那里打入例如以下命令: netsh winsock reset catalog netsh int ip reset reset.log hit 重新启动电脑后,就 ...
- 解决配置Ubuntu中vnc远程显示灰屏
解决配置Ubuntu中vnc远程显示灰屏a. 缺失图形化工具b. ~/.vnc/xstartup 权限不对1. Ubuntu 16.04 安装 VNC 及 Mate 桌面环境https://www. ...
- 4.使用fastjson进行json字符串和List的转换
转自:https://blog.csdn.net/lipr86/article/details/80833952 使用fastjson进行自定义类的列表和字符串转换 1.环境 jdk1.8,fastj ...
- Apache通用日志工具commons-logging和Log4j使用总结
转自:https://blog.csdn.net/lzl13391522110/article/details/53758536 Apache通用日志工具commons-logging和Log4j使用 ...
- 微信小程序简单常见首页demo
wxml <view class='index-contier'> <view class="index-left"> <view>电池剩余&l ...
- C#解决关闭多线程的form主窗体时抛出ObjectDisposedException 异常
一.现象: 我在主窗体新建线程,使用子线程来处理接收到的数据,并且更新窗体显示内容,但关闭主窗体程序之后就程序就报错,如下所示: 二.分析问题: 由于新建线程的处理函数里边是一直死循环处理数据,虽然窗 ...