C# 对象克隆,DataTable转LIST
public class ConvertHelper<T> where T : new()
{
private static string module = "ConvertHelper.cs"; public static ObservableCollection<T> ConvertToList(List<T> listobject)
{
ObservableCollection<T> collection = null;
try
{
collection = new ObservableCollection<T>(listobject);
}
catch (Exception ex)
{
ServiceLocator.Current.GetInstance<IWriteLog>().Log(LogConstant.LogType.Exception, module,
"Error occurs on ConvertToList modules: {0}.", ex.Message);
} return collection;
} public static ObservableCollection<T> ConvertToObservable(DataTable dt)
{
ObservableCollection<T> collection = null; // 定义集合
List<T> ts = new List<T>(); try
{
// 获得此模型的类型
Type type = typeof(T); // 定义一个临时变量
string tempName = string.Empty; // 遍历DataTable中所有的数据行
foreach (DataRow dr in dt.Rows)
{
T t = new T(); // 获得此模型的公共属性
PropertyInfo[] propertys = t.GetType().GetProperties(); // 遍历该对象的所有属性
foreach (PropertyInfo pi in propertys)
{
// 将属性名称赋值给临时变量
tempName = pi.Name; // 检查DataTable是否包含此列(列名==对象的属性名)
if (dt.Columns.Contains(tempName))
{
// 判断此属性是否有Setter 该属性不可写,直接跳出
if (!pi.CanWrite) continue; // 取值
object value = dr[tempName]; // 如果非空,则赋给对象的属性
if (value != DBNull.Value)
pi.SetValue(t, value.ToString(), null);
}
} // 对象添加到泛型集合中
ts.Add(t);
}
collection = new ObservableCollection<T>(ts);
}
catch (Exception ex)
{
ServiceLocator.Current.GetInstance<IWriteLog>().Log(LogConstant.LogType.Exception, module,
"Error occurs on ConvertToList modules: {0}.", ex.Message);
} return collection;
} /// 利用反射和泛型
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static List<T> ConvertToList(DataTable dt)
{
// 定义集合
List<T> ts = new List<T>(); try
{
// 获得此模型的类型
Type type = typeof(T); // 定义一个临时变量
string tempName = string.Empty; // 遍历DataTable中所有的数据行
foreach (DataRow dr in dt.Rows)
{
T t = new T(); // 获得此模型的公共属性
PropertyInfo[] propertys = t.GetType().GetProperties(); // 遍历该对象的所有属性
foreach (PropertyInfo pi in propertys)
{
// 将属性名称赋值给临时变量
tempName = pi.Name; // 检查DataTable是否包含此列(列名==对象的属性名)
if (dt.Columns.Contains(tempName))
{
// 判断此属性是否有Setter 该属性不可写,直接跳出
if (!pi.CanWrite) continue; // 取值
object value = dr[tempName]; // 如果非空,则赋给对象的属性
if (value != DBNull.Value)
pi.SetValue(t, value.ToString(), null);
}
} // 对象添加到泛型集合中
ts.Add(t);
}
}
catch (Exception ex)
{
ServiceLocator.Current.GetInstance<IWriteLog>().Log(LogConstant.LogType.Exception, module,
"Error occurs on ConvertToList modules: {0}.", ex.Message);
} return ts;
}
}
对象克隆赋值
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
List<Test> list = new List<Test>();
Test test = new Test(); test.ID = "1";
test.NAME = "xz";
list.Add(test);
Test test1=new Test ();
CopyValue(list[0], test1); test1.NAME = "xznihoa";
list.Add(test1);
} public static void CopyValue(object origin, object target)
{
System.Reflection.PropertyInfo[] properties = (target.GetType()).GetProperties();
System.Reflection.PropertyInfo[] fields = (origin.GetType()).GetProperties();
for (int i = 0; i < fields.Length; i++)
{
for (int j = 0; j < properties.Length; j++)
{
if (fields[i].Name == properties[j].Name && properties[j].CanWrite)
{
properties[j].SetValue(target, fields[i].GetValue(origin,null), null);
}
}
}
} } public class Test
{
public string ID { get; set; } public string NAME { get; set; }
}
C# 对象克隆,DataTable转LIST的更多相关文章
- Java提高篇——对象克隆(复制)
假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short, ...
- C#对象克隆介绍
浅拷贝和深拷贝 有两种对象克隆的方法:浅拷贝和深拷贝.浅拷贝只是复制引用,而不会复制引用的对象.深拷贝会复制引用的对象. 因此,原始对象中的引用和浅拷贝对象中的同一个引用都指向同一个对象.而深拷贝的对 ...
- Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨
Java对象克隆(Clone)及Cloneable接口.Serializable接口的深入探讨 Part I 没啥好说的,直接开始Part II吧. Part II 谈到了对象的克隆,就不得不说为什么 ...
- js对象克隆, 深复制.
亲测有效: //对象克隆 function clone(obj) { // Handle the 3 simple types, and null or undefined if (null == o ...
- (转)Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨
原文地址:http://blog.csdn.net/kenthong/article/details/5758884 Part I 没啥好说的,直接开始Part II吧. Part II 谈到了对象的 ...
- Java对象克隆详解
原文:http://www.cnblogs.com/Qian123/p/5710533.html 假如说你想复制一个简单变量.很简单: int apples = 5; int pears = appl ...
- 【java】对象克隆protected Object clone() throws CloneNotSupportedException
package 对象克隆; class A implements Cloneable{//要具备clone()功能必须要实现Cloneable接口,此接口里无方法,只起标识作用. private St ...
- java 浅拷贝和深拷贝 对象克隆clone
分一下几点讨论: 为什么要克隆? 如何实现克隆 浅克隆和深克隆 解决多层克隆问题 总结 一:为什么要克隆? 大家先思考一个问题,为什么需要克隆对象?直接new一个对象不行吗? 答案是:克隆的对象可能包 ...
- js对象克隆
大家都知道,js的对象是引用类型,如果直接var obj2 = obj,obj2和obj是共享同一个对象实体的,这往往不是我们想要的结果. 官方并没有给出通用的对象克隆方法: 我们给出以下几种写法: ...
随机推荐
- 基于jquery的常见函数封装
/// <reference path="jquery-1.8.0.min.js" />/** DIV或元素居中* @return*/jQuery.fn.mCenter ...
- CF17E Palisection (回文自动机+DP)
题目传送门 题目大意:给你一个字符串,让你求出有多少对相交的回文子串 啊啊啊啊降智了,我怎么又忘了正难则反! 求相交会很难搞.把问题转化成求互不相交的回文子串再减一下就行了 先利用$PAM$求出以每个 ...
- 玩转vim编辑器
1.vim 编辑器可以自定义配置:包含初始化命令的文件叫vimrc(h vimrc),version ---查看版本号.系统-用户配置文件所在位置. 2. 可视模式: 操作一块区域代码: 按v ...
- cuda npp库旋转图片
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h&g ...
- 利用fontforge制作自己的字体
最近手伤了,写代码特别慢,索性就干干一些奇奇怪怪的事情. 发现我电脑上的中文字体很是奇怪,于是便去找了中英混合的等宽字体. 满足条件的只找到了YaHei Consolas Hybrid,是微软的Con ...
- hdu 4950
#include<stdio.h> int main(){ __int64 h,a,b,k,j=0; while(scanf("%I64d%I64d%I64d%I64d" ...
- 如何将变量id添加到jquery的选择器中
今天在做广州仲裁委员会的系统时这样的一个需求,需要在页面一加载的时候查询各个项目的案件数,这里有很多个项目,一开始我是这样写的: 代码如下: $.get(assignedCaseUrl,functio ...
- Spell checker POJ 1035 字符串
Spell checker Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 25426 Accepted: 9300 De ...
- [bzoj4025]二分图_LCT
二分图 bzoj-4025 题目大意:给定一个n个节点的图,m条边,每条边有一个产生时间和一个删除时间,询问所有时间点是否是连通图. 注释:$1\le n\le 10^5$,$1\le m\le 2\ ...
- 不修改代码就能优化ASP.NET网站性能的一些方法 [转]
不修改代码就能优化ASP.NET网站性能的一些方法 阅读目录 开始 配置OutputCache 启用内容过期 解决资源文件升级问题 启用压缩 删除无用的HttpModule 其它优化选项 本文将介绍一 ...