使用反射实现2个类实例之间传值的的泛型通用方法

 

      在写api接口时,遇到一个需要根据id修改数据库值的POST方法,输入参数是一个DTO实体input,字段类型和名称和被修改的Entity实体属性结构类似,都有20多个字段,
在方法内部的,由于将Input对象的属性值逐个赋给Entity,显得过于臃肿,后写了一个通用的泛型方法,利用反射将Input的值传递给Entity。代码如下:

/// <summary>
/// 传入类型A的对象a,类型B的对象b,将b和a相同名称的值进行赋值给a
/// </summary>
/// <typeparam name="A"></typeparam>
/// <typeparam name="B"></typeparam>
/// <param name="a"></param>
/// <param name="b"></param>
public static T2 Mapper<T1, T2>(T1 PassValueEntity, T2 TargetEntity)
{
try
{
Type TypePassValue = PassValueEntity.GetType();//获得类型
Type TypeTargetEntity = typeof(T2);
foreach (PropertyInfo sp in TypeTargetEntity.GetProperties())//获得类型的属性字段
{
foreach (PropertyInfo ap in TypePassValue.GetProperties())
{
if (ap.Name == sp.Name)//判断属性名是否相同
{
object obj = ap.GetValue(PassValueEntity,null) as IComparable;
sp.SetValue(TargetEntity, obj, null);//获得b对象属性的值复制给a对象的属性
 }
}
}
}
catch (Exception ex)
{
throw ex;
}

return TargetEntity;
}

posted on 2019-05-24 13:52  桐舟共济  阅读(352)  评论(0编辑  收藏  举报

导航