using System; using System.Collections.Generic; using System.Linq; using System.Reflection; namespace iWareCommon.Utils { /// /// 用于属性属性赋值操作的帮助类 /// /// 原对象类 /// 目标对象类 public class EntityPropHelper where T:class where S:class { /// /// 将t中的各个对于的属性值赋值到s中相应的属性 /// /// 原对象 /// 目标对象 /// 以T中的属性名为键,S中的属性名为值的字典 public static void CopyProp(T t, S s, Dictionary columnMap) { Type typeT = typeof(T); Type typeS = typeof(S); var sProps = typeS.GetProperties(BindingFlags.Public | BindingFlags.Instance).ToList(); var sPropDic = new Dictionary(); var keys = columnMap.Keys; var values = columnMap.Values; //遍历S的所有属性,将符合修改的存入字典中 sProps.ForEach(p => { if (values.Contains(p.Name)) { sPropDic.Add(p.Name, p); } }); var tProps = typeT.GetProperties(BindingFlags.Public | BindingFlags.Instance).ToList(); var tPropDic = new Dictionary(); //遍历S的所有属性,将符合修改的存入字典中 tProps.ForEach(p => { if (keys.Contains(p.Name)) { tPropDic.Add(p.Name, p); } }); foreach(var key in keys) { var propValue = tPropDic[key].GetValue(t, null); sPropDic[columnMap[key]].SetValue(s, propValue, null); } } /// /// 将s中的各个对于的属性值赋值到t中相应的属性 /// /// 目标对象 /// 原对象 /// 以T中的属性名为键,S中的属性名为值的字典 public static void CopyProp(S s,T t , Dictionary columnMap) { Type typeT = typeof(T); Type typeS = typeof(S); var sProps = typeS.GetProperties(BindingFlags.Public | BindingFlags.Instance).ToList(); var sPropDic = new Dictionary(); var keys = columnMap.Keys; var values = columnMap.Values; //遍历S的所有属性,将符合修改的存入字典中 sProps.ForEach(p => { if (values.Contains(p.Name)) { sPropDic.Add(p.Name, p); } }); var tProps = typeT.GetProperties(BindingFlags.Public | BindingFlags.Instance).ToList(); var tPropDic = new Dictionary(); //遍历S的所有属性,将符合修改的存入字典中 tProps.ForEach(p => { if (keys.Contains(p.Name)) { tPropDic.Add(p.Name, p); } }); foreach (var key in keys) { var propValue = sPropDic[columnMap[key]].GetValue(s, null); tPropDic[key].SetValue(t, propValue, null); } } /// /// 将t中的各个对于的属性值赋值到s中相应的属性 /// /// 原对象 /// 目标对象 /// 以T中的属性名为键,S中的属性名为值的字典 public static void CopyProp(T t, S s,List propNames) { Type typeT = typeof(T); Type typeS = typeof(S); var sProps = typeS.GetProperties(BindingFlags.Public | BindingFlags.Instance).ToList(); var sPropDic = new Dictionary(); //遍历S的所有属性,将符合修改的存入字典中 sProps.ForEach(p => { if (propNames.Contains(p.Name)) { sPropDic.Add(p.Name, p); } }); var tProps = typeT.GetProperties(BindingFlags.Public | BindingFlags.Instance).ToList(); var tPropDic = new Dictionary(); //遍历S的所有属性,将符合修改的存入字典中 tProps.ForEach(p => { if (propNames.Contains(p.Name)) { tPropDic.Add(p.Name, p); } }); foreach (var propName in propNames) { var propValue = tPropDic[propName].GetValue(t, null); sPropDic[propName].SetValue(s, propValue, null); } } } }