ConvertHelper与泛型集合
在机房重构时。我们常常会用到ConvertHelper。
它把从数据库中查询到的dateTable(也是一个暂时表)转化为泛型,然后再填充到DataGridView控件中。
ConvertHelper类有两点体现了面向对象的思想。一是由于它是常常被使用而被封装起来的类。二是由于它的返回值是泛型集合,泛型集合使存储数据时灵活而安全,也体现了面向对象的思想。
ConvertHelper与sqlHelper
下面是各个命名空间的含义。
System
包括用于定义经常使用值和引用数据类型、事件和事件处理程序、接口、属性和处理异常的基础类和基类。其它类提供支持下列操作的服务:数据类型转换,方法參数操作,数学计算,远程和本地程序调用,应用程序环境管理以及对托管和非托管应用程序的监管。
System.Data
包括组成大部分 ADO.NET 结构的类。ADO.NET 结构使您能够生成可用于有效管理来自多个数据源的数据的组件。在断开连接的方案(如 Internet)中。ADO.NET 提供了一些能够在多层系统中请求、更新和协调数据的工具。ADO.NET 结构也能够在client应用程序(如 Windows 窗口)或 ASP.NET 创建的 HTML 页中实现。
System.Configuration
命名空间包括具有下面用途的类型:处理配置数据,如计算机或应用程序配置文件里的数据。子命名空间包括具有下面用途的类型:配置程序集,编写组件的自己定义安装程序。支持用于在client和server应用程序中加入或删除功能的可插入模型。
System.Collections
包括定义各种对象集合(如列表、队列、位数组、哈希表和字典)的接口和类。
System.Collections.Generic
包括定义泛型集合的接口和类;泛型集合同意用户创建强类型的集合,这样的集合在类型安全和性能上均优于非泛型强类型集合。
ConvertHelper返回的是泛型集合。所以我们要引用System.Collections.Generic,大大提高效率和安全性能
泛型集合
代码
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 '定义一个暂时变量
Dim dr As DataRow '定义行集 '遍历DataTable的全部数据行
For Each dr In dt.Rows
Dim myT As New T '创建一个实体类的对象
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) '定义一个对象型的变量来保存列的值 '假设非空。则赋给对象的属性
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
总结
ConvertHelper与泛型集合的更多相关文章
- 使用泛型集合取代datatable作为返回值实现面向对象
开会的时候,师父说.我们在机房重构时,尽量不要用datatable作为返回值.改用泛型集合的方式,这样能够实现真正的面向对象. 通过查资料和同学交流,把这个问题给攻克了. 对于泛型集合.我也有了一些认 ...
- C# DataSet装换为泛型集合
1.DataSet装换为泛型集合(注意T实体的属性其字段类型与dataset字段类型一一对应) #region DataSet装换为泛型集合 /// <summary> /// 利用反射和 ...
- Linq操作非泛型集合
我们都知道,Linq能查询泛型集合,确切的说是:LINQ能实现查询泛型对象或者实现了IEnumerable.但是,很遗憾的是诸如ArrayList这样的非泛型集合并没有实现IEnumerable.那咋 ...
- c#利用泛型集合,为自己偷偷懒。
有人说"越懒"的程序员进步的越快!其实还挺有道理.亲身体验,从刚出来工作到现在,自己变"懒"了许多,但感觉写出来的代码确有了不少提升.刚开始啊,同样的代码,赋值 ...
- 2016年11月27日--面向对象:多态、类库、委托、is和as运算符、泛型集合
1.虚方法 virtual 重写 override 父类中的方法,在子类中并不适用,那么子类需要自主更改继承的方法或者是属性,那父类中加了virtual关键字的方法才可以被子类重写,子类重写父类的方法 ...
- GsonUtils.getGson().fromJson() 转泛型集合
List<QiTaFree> qiTaFreeList = GsonUtils.getGson().fromJson(exhiMain.getQiTaFressJson(), new Ty ...
- 快速入门系列--CLR--03泛型集合
.NET中的泛型集合 在这里主要介绍常见的泛型集合,很多时候其并发时的线程安全性常常令我们担忧.因而简述下.NET并发时线程安全特性,其详情请见MSDN. 普通集合都不支持多重并发写操作 部分支持单线 ...
- 类库,委托,as.is,var,泛型集合
类库: 就是让别人调用你写的方法,并且不让别人看到你是怎么实现的.(比如说一些核心文件) 如果有功能你不会做,需要别人帮忙,那么你的同事可以帮你写好一个类,然后你来调用这个类中的方法,完成你的项目. ...
- 面向对象——is和as运算符、泛型集合 List<T>
二:is和as运算符: (1) is运算符 is 运算符用于检查对象是否与给定类型兼容.如果兼容返回true,否则返回false; 一般用于查看某个类是否实现了某个接口,或者是不是某个类的子类; 例如 ...
随机推荐
- EasyUI 添加tab页(iframe方式)
function addTab(title, href,icon){ var tt = $('#tabs'); if (tt.tabs('exists', title)){//如果tab已经存在,则选 ...
- shell脚本编写笔记
包含转载内容,转载自http://wenku.baidu.com/link?url=jtCHxEYzgGve6P64U3JRQRgU6nhpGvqFLLpWu9I2Htq6hi9TGLudRFkk7r ...
- 【转】AngularJS路由和模板
1. AngularJS路由介绍 AngularJS路由功能是一个纯前端的解决方案,与我们熟悉的后台路由不太一样.后台路由,通过不同的URL会路由到不同的控制器上(controller),再渲染(re ...
- Android学习系列(7)--App轮询服务器消息
这篇文章是android开发人员的必备知识. 1.轮询服务器 一般的应用,定时通知消息可以采用轮询的方法从服务器拿取消息,当然实时消息通知的话,建议采用推送服务. 其中需要注意轮询的频率 ...
- 【Jenkins】Linux搭建Jenkins平台
为了配合上一篇的ant+jenkins做持续集成,需要在linux环境下搭建一个jenkins平台.网上有很多安装的例子,我主要记录一下自己遇到的问题,真真的是特别惆怅的,每次我遇到的问题都格外多. ...
- 【Python】Python-skier游戏[摘自.与孩子一起学编程]
这是一个滑雪者的游戏. skier从上向下滑,途中会遇到树和旗子,捡起一个旗子得10分,碰到一颗树扣100分,可以用左右箭头控制skier方向. 准备素材 一 准备python环境:我下载的pytho ...
- lightoj 1017
思路:动态规划,设dp[i][j]表示在前j个dusts中用了i刷子刷掉dusts的个数:状态转移方程就是: dp[i][j] = max(dp[i][j-1], dp[i-1][j-len[j]] ...
- mssql server 2005还原数据库bak文件与“备份集中的数据库备份与现有的xx数据库不同”解决方法
mssql server 2005还原数据库bak文件,网站使用虚拟主机建站会经常遇到,一般情况下,主机商有在线的管理程序,但有时候没有的话,就需要本地还原备份sql数据库了.这种情况mssql se ...
- extern "C"的用法解析(转)
原文链接:http://www.cnblogs.com/rollenholt/archive/2012/03/20/2409046.html 1.引言 C++语言的创建初衷是“a better C ...
- 【暑假】[实用数据结构]UVAlive 3027 Corporative Network
UVAlive 3027 Corporative Network 题目: Corporative Network Time Limit: 3000MS Memory Limit: 30000K ...