C# 对象互转
/// <summary> /// 适用于初始化新实体 /// </summary> static public T RotationMapping<T, S>(S s) { T target = Activator.CreateInstance<T>(); var originalObj = s.GetType(); var targetObj = typeof(T); foreach (PropertyInfo original in originalObj.GetProperties()) { foreach (PropertyInfo t in targetObj.GetProperties()) { if (t.Name == original.Name) { t.SetValue(target, original.GetValue(s, null), null); } } } return target; } /// <summary> /// 适用于没有新建实体之间 /// </summary> static public T RotationMapping<T, S>(T t, S s) { var originalObj = s.GetType(); var targetObj = typeof(T); foreach (PropertyInfo sp in originalObj.GetProperties()) { foreach (PropertyInfo dp in targetObj.GetProperties()) { if (dp.Name == sp.Name) { dp.SetValue(t, sp.GetValue(s, null), null); } } } return t; }
static public void AutoMapping<S, T>(S s, T t) { PropertyInfo[] pps = GetPropertyInfos(s.GetType()); Type target = t.GetType(); foreach (var pp in pps) { PropertyInfo targetPP = target.GetProperty(pp.Name); object value = pp.GetValue(s, null); if (targetPP != null && value != null) { targetPP.SetValue(t, value, null); } } } static public PropertyInfo[] GetPropertyInfos(Type type) { return type.GetProperties(BindingFlags.Public | BindingFlags.Instance); }