C# DataTable 转换成List<T>

简介: 运用泛型和反射实现的转换,很给力。代码中掺杂详尽注释,稍微了解一下泛型和反射便可以了解转换的实质。可以直接复制粘贴进行调用哦。public class DtConverToList where T : new() {     public static List DtToList(DataTab...
运用泛型和反射实现的转换,很给力。代码中掺杂详尽注释,稍微了解一下泛型和反射便可以了解转换的实质。可以直接复制粘贴进行调用哦。

public
 class DtConverToList<T> where T : new() {     public static List<T> DtToList(DataTable dt)     {         //定义集合         List<T> ListCollection = new List<T>(dt.Rows.Count);         //获得 T 模型类型         Type T_type = typeof(T);         //获得 T 模型类型公共属性         PropertyInfo[] Proper = T_type.GetProperties();         //临时变量,存储变量模型公共属性Name         string Tempname = "";         //遍历参数 DataTable的每行         foreach (DataRow Dr in dt.Rows)         {             //实例化 T 模版类             T t = new T();             //遍历T 模版类各个属性             #region             foreach (PropertyInfo P in Proper)             {                 //取出类属性之一                 Tempname = P.Name;                 //判断DataTable中是否有此列                 if (dt.Columns.Contains(Tempname))                 {                     //判断属性是否可写属性                     if (!P.CanWrite)                     {                         continue;                     }                     try                     {                         //得到Datable单元格中的值                         object value = Dr[Tempname];                         //得到 T 属性类型                         Type ProType = P.PropertyType;                         //判断类型赋值                         if (value != DBNull.Value)                         {                             //                             if (value.GetType() == ProType)                             {                                 P.SetValue(t, value, null);                             }                             else                             {                                 if (ProType == typeof(string))                                 {                                     string Temp = value.ToString();                                     P.SetValue(t, Temp, null);                                 }                                 else if (ProType == typeof(byte))                                 {                                     byte Temp = Convert.ToByte(value);                                     P.SetValue(t, Temp, null);                                 }                                 else if (ProType == typeof(short))                                 {                                     short Temp = short.Parse(value.ToString());                                     P.SetValue(t, Temp, null);                                 }                                 else if (ProType == typeof(long))                                 {                                     long Temp = long.Parse(value.ToString());                                     P.SetValue(t, Temp, null);                                 }                                 else if (ProType == typeof(Int64))                                 {                                     Int64 Temp = Convert.ToInt64(value);                                     P.SetValue(t, Temp, null);                                 }                                 else if (ProType == typeof(Int32))                                 {                                     Int32 Temp = Convert.ToInt32(value);                                     P.SetValue(t, Temp, null);                                 }                                 else if (ProType == typeof(Int16))                                 {                                     Int16 Temp = Convert.ToInt16(value);                                     P.SetValue(t, Temp, null);                                 }                                 else                                 {                                     object Temp = Convert.ChangeType(value, ProType);                                     P.SetValue(t, Temp, null);                                 }                             }                         }                     }                     catch (Exception)                     {                         throw;                     }                 }             }             #endregion             ListCollection.Add(t);         }         return ListCollection;     } }
目录
相关文章
|
2月前
|
C#
C# DataTable不能通过已删除的行访问该行的信息
C# DataTable不能通过已删除的行访问该行的信息
|
2月前
|
安全 C#
C# List基本用法
C# List基本用法
|
2月前
|
存储 开发框架 .NET
C#中将DataTable转化成ListT的方法解析
C#中将DataTable转化成ListT的方法解析
80 0
|
2月前
|
存储 C# 索引
C# | 比较IEnumerable、List、数组
IEnumerable`定义了一组用于枚举集合的方法,包括`GetEnumerator`方法,该方法返回一个实现了`IEnumerator`接口的对象,用于枚举集合中的每个元素。`List`和数组都可以使用`foreach`循环来遍历其中的元素,这是因为它们都实现了`IEnumerable`接口。 由于数组在内存中开辟了一段连续的空间,因此可以直接通过索引访问元素,访问速度很快。而 List 则需要通过指针或引用来访问元素,速度相对较慢。 由于数组的大小是固定的,当需要添加或删除元素时,需要重新创建一个新数组,将原数组中的元素复制到新数组中,并添加或删除元素。
95 0
C# | 比较IEnumerable、List、数组
|
12月前
|
C#
C#List与ArrayList,Hashtable与Dictionary总结
C#List与ArrayList,Hashtable与Dictionary总结
39 0
C#List与ArrayList,Hashtable与Dictionary总结
|
12月前
|
安全 C# 索引
C# 泛型集合和非泛型集合(List ArrayLIst)
C# 泛型集合和非泛型集合(List ArrayLIst)
78 0
|
12月前
|
数据库 C#
C#,.net,winform导入Excel功能以及下载Excel文件到本地,并使用SqlBulkCopy把DataTable类型的数据写入到sqlserver数据库中
C#,.net,winform导入Excel功能以及下载Excel文件到本地,并使用SqlBulkCopy把DataTable类型的数据写入到sqlserver数据库中
285 0
|
12月前
|
存储 安全 C#
C#里面的不同集合(数组、ArrayList集合、List泛型)
在内存中连续存储,因此可以快速而容易地从头到尾遍历元素,可以快速地修改元素
|
12月前
|
数据库
dataTable转list
dataTable转list
80 0
|
12月前
|
C# Windows
C# DataTable导出PDF,解决引入中文字体失败的问题
C# DataTable导出PDF,解决引入中文字体失败的问题