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是共享同一个对象实体的,这往往不是我们想要的结果. 官方并没有给出通用的对象克隆方法: 我们给出以下几种写法: ...
随机推荐
- 16.copy_to定制组合field解决cross-fields搜索弊端
主要知识点: 在index的mapping中加copy_to字段的方法 copy_to搜索方法 用most_fields策略,去实现cross-fields搜索,有3大弊端,为了解决这三个弊端 ...
- 第五节:DataFrame聚合函数
- 百度搜索引擎关键字URL采集爬虫优化行业定投方案高效获得行业流量-代码篇
需要结合:<百度搜索引擎关键字URL采集爬虫优化行业定投方案高效获得行业流量--笔记篇> 一起看. #!/user/bin/env python # -*- coding:utf-8 -* ...
- ThinkPHP5 自定义异常
1.配置config.php 自定义异常路径: // 默认AJAX 数据返回格式,可选json xml ...'default_ajax_return' => 'json', 'exceptio ...
- N天学习一个linux命令之sort
用途 对文本内容按行排序,输出排好序后的内容到标准输出流 用法 sort [OPTION]... [FILE]... sort [OPTION]... --files0-from=F 常用选项 -b, ...
- jQuery和CSS3炫酷button点击波特效
这是一款效果很炫酷的jQuery和CSS3炫酷button点击波特效.该特效当用户在菜单button上点击的时候.从鼠标点击的点開始,会有一道光波以改点为原点向外辐射的动画效果,很绚丽. 在线演示:h ...
- python 使用scapy编写DNS Fuzzer
1. 描写叙述 使用scapy库,编写一个DNS Fuzzer工具,并測试.在这之前.先说明一下DNS协议请求包是封装在IP包中的UDP包(有些情况也可使用TCP)中.且UDP的端口为53. 进入sc ...
- Codeforces 510 A.Fox and Snake
题目链接:http://codeforces.com/contest/510/problem/A A. Fox And Snake time limit per test2 seconds memor ...
- gitserver提交代码的总结
将更新的代码提交到gitserver上所须要的步骤: 1.git pull 更新代码到最新 2,git add 文件名称 加入要提交的文件 3,git commit -m "关于改动的内 ...
- iOS开发网络篇之Web Service和XML数据解析
郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主.捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...