C# 对象间的 深拷贝 实现

2016-08-20 10:36:10来源:http://muzizongheng.blog.51cto.com/856912/1333066作者:muzizongheng人点击


<?xml version="1.0" encoding="UTF-8"?>以下的这个类实现了 2个含有部分字段名字相同 的对象的 赋值拷贝。

public class ShallowCopyHelper { public static void CopyPropertiesValue(object objFrom, object objTo) { if (null == objFrom) { return; }
if (null == objTo) { return; }
Type typeFrom = objFrom.GetType(); Type typeTo = objTo.GetType();
if (objFrom is IList) { try { int count = (objFrom as IList).Count; for (int i = 0; i < count; i++) { CopyPropertiesValue((objFrom as IList)[i], (objTo as IList)[i]); } } catch { // } } else { foreach (System.Reflection.PropertyInfo pi in typeFrom.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)) { try { object valueFrom = typeFrom.GetProperty(pi.Name).GetValue(objFrom, null); object valueTo = typeTo.GetProperty(pi.Name).GetValue(objTo, null);
if (typeFrom.GetProperty(pi.Name).PropertyType.IsClass && !typeFrom.GetProperty(pi.Name).PropertyType.IsPrimitive && !(valueFrom is String)) { CopyPropertiesValue(valueFrom, valueTo); } else { if (valueFrom == null || !valueFrom.Equals(valueTo)) { //Set value to latest data typeTo.GetProperty(pi.Name).SetValue(objTo, valueFrom, null); } } } catch { // }
} } } }

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台