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; 一般用于查看某个类是否实现了某个接口,或者是不是某个类的子类; 例如 ...
随机推荐
- 使用Unity3D自带动画系统制作下雨效果
之前看了以前版本的unity3d demo AngryBots ,觉得里面的下雨效果不错,刚好前段时间学习了,写出来跟大家分享下,直接开始. 使用自带动画系统制作下雨效果. 先制作下雨的雨滴涟漪 步骤 ...
- Terrocotta - 基于JVM的Java应用集群解决方案
前言 越来越多的企业关键应用都必须采用集群技术,实现负载均衡(Load Balancing).容错(Fault Tolerance)和灾难恢复(Failover).以达到系统可用性(High Avai ...
- I.MX6 Linux 自动获取AR1020 event input节点
/*********************************************************************** * I.MX6 Linux 自动获取AR1020 ev ...
- 打印web页面指定区域的三种方法
本文和大家分享一下web页面实现指定区域打印功能的三种方法,一起来看下吧. 第一种方法:使用CSS 定义一 个.noprint的class,将不打印的内容放入这个class内. 代码如下: <s ...
- hdu 1712 ACboy needs your help
ACboy needs your help Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- 【转】 COCOS2D-X之使用CURL下载图片的一个简单Demo
#include"curl/curl.h" #pragma comment(lib,"libcurl_imp.lib") bool HelloWorld::i ...
- e8_4输出菲波拉契数列的前10项
program fbnq;{输出菲波拉契数列的前10项} var a:..] of integer; i:integer; begin a[]:=; a[]:=; do a[i]:=a[i-]+a[i ...
- CF 55D - Beautiful numbers(数位DP)
题意: 如果一个数能被自己各个位的数字整除,那么它就叫 Beautiful numbers.求区间 [a,b] 中 Beautiful numbers 的个数. 分析:先分析出,2~9 的最大的最小公 ...
- 通过chrome识别手机端app元素--Chrome:inspector
现实中应该有这样一种情况,就是一个app只支持手机端使用,同时他又是hybrid的,那么其中的webview部分的元素属性如何去获得呢? 使用下面的方法可以解决这个问题: 调试 Android Chr ...
- Cppcheck代码分析(1)
一.检查点 1.自动变量检查: 返回自动变量(局部变量)指针 2.越界检查: 数组越界返回自动变量(局部变量)指针 3.类检查: 构造函数初始化 4.内存泄露检查: 5.空指针检查: 6.废弃函数检查 ...