兩個類我就不創建了,具體實現方法如下:
/// <summary> /// 通過反射把一個類的屬性的值賦值給另一個類 /// </summary> /// <typeparam name="D"></typeparam> /// <typeparam name="S"></typeparam> /// <param name="s"></param> /// <returns></returns> public static D Mapper<D, S>(S s) { D d = Activator.CreateInstance<D>(); try { var sType = s.GetType(); var dType = typeof(D); foreach (PropertyInfo sP in sType.GetProperties()) { foreach (PropertyInfo dP in dType.GetProperties()) { if (dP.Name == sP.Name) { dP.SetValue(d, sP.GetValue(s)); } } } } catch (Exception ex) { } return d; }
其中D代表新類,S代表原來的類。
首先實例化D類,sType代表獲取S類的屬性,dtype獲取D類的屬性,然后利用GetProperties()方法獲取類別下的每一個屬性,
如果D類下的屬性和S類下的屬性相同,則把S類屬性相對應的value值賦值給D類隊形的屬性。(利用Getvalues()獲取),
調用如下:
Mapper<User, UserInfo>(UserInfo u);
