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是共享同一个对象实体的,这往往不是我们想要的结果. 官方并没有给出通用的对象克隆方法: 我们给出以下几种写法: ...
随机推荐
- 洛谷——P1757 通天之分组背包
P1757 通天之分组背包 题目背景 直达通天路·小A历险记第二篇 题目描述 自01背包问世之后,小A对此深感兴趣.一天,小A去远游,却发现他的背包不同于01背包,他的物品大致可分为k组,每组中的物品 ...
- RabbitMQ在Ubuntu上的环境搭建
1.修改/etc/apt/sources.list文件 A:命令:vi /etc/apt/sources.list B:在最后一行加上:deb http://www.rabbitmq.com/debi ...
- 46.颜色+品牌下钻分析时按最深层metric进行排序
主要知识点: 在做下钻分析时的排序 需求,以颜色进行bucket,这里bucket里面的doc以其各品牌的平均价格排序, GET /tvs/sales/_search { " ...
- h5知识总结
移动开发基本知识点一. 使用rem作为单位 html { font-size: 100px; } @media(min-width: 320px) { html { font-size: 100px; ...
- Java8新特性之forEach遍历
参考文章: https://www.cnblogs.com/billyu/p/6118008.html
- LightOJ - 1148 - Mad Counting
先上题目: 1148 - Mad Counting PDF (English) Statistics Forum Time Limit: 0.5 second(s) Memory Limit: 3 ...
- hdu_1863_畅通工程_201403122000
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- Codeforces Round #418 (Div. 2) C. An impassioned circulation of affection
C. An impassioned circulation of affection time limit per test 2 seconds memory limit per test 256 m ...
- Javascript中JSON的序列化和反序列化(转)
parse用于从一个字符串中解析出JSON对象,如: var str = '{"name":"easonjim","age":"2 ...
- SQL Server内核架构剖析与NUMA
http://www.cnblogs.com/lyhabc/p/4272053.html http://www.cnblogs.com/lyhabc/archive/2013/02/05/289247 ...