C#利用反射實現兩個類的對象之間相同屬性的值的復制


http://blog.csdn.net/u013093547/article/details/53584591

今天在拷貝對象的時候,看着代碼實在是有點煩,一堆一樣的代碼,還是找找有沒有直接反射拷貝不同對象相同屬性的值

百度了一下,結果第二個博客就是,地址就是最上面的鏈接地址

其中主要的就是下面這段代碼了

 1  /// <summary>
 2         /// 傳入類型B的對象b,將b與a相同名稱的值進行賦值給創建的a中
 3         /// </summary>
 4         /// <typeparam name="A">類型A</typeparam>
 5         /// <typeparam name="B">類型B</typeparam>
 6         /// <param name="b">類型為B的參數b</param>
 7         /// <returns>拷貝b中相同屬性的值的a</returns>
 8         public static A Mapper<A, B>(B b)
 9         {
10             A a = Activator.CreateInstance<A>();
11             try
12             {
13                 Type Typeb = b.GetType();//獲得類型  
14                 Type Typea = typeof(A);
15                 foreach (PropertyInfo sp in Typeb.GetProperties())//獲得類型的屬性字段  
16                 {
17                     foreach (PropertyInfo ap in Typea.GetProperties())
18                     {
19                         if (ap.Name == sp.Name)//判斷屬性名是否相同  
20                         {
21                             ap.SetValue(a, sp.GetValue(b, null), null);//獲得b對象屬性的值復制給a對象的屬性  
22                         }
23                     }
24                 }
25             }
26             catch (Exception ex)
27             {
28                 throw ex;
29             }
30             return a;
31         }
創建A拷貝B
 1 /// <summary>
 2         /// 傳入類型A的對象a,類型B的對象b,將b和a相同名稱的值進行賦值給a
 3         /// </summary>
 4         /// <typeparam name="A"></typeparam>
 5         /// <typeparam name="B"></typeparam>
 6         /// <param name="a"></param>
 7         /// <param name="b"></param>
 8         public static void Mapper<A, B>(B b,ref A a)
 9         {
10             try
11             {
12                 Type Typeb = b.GetType();//獲得類型  
13                 Type Typea = typeof(A);
14                 foreach (PropertyInfo sp in Typeb.GetProperties())//獲得類型的屬性字段  
15                 {
16                     foreach (PropertyInfo ap in Typea.GetProperties())
17                     {
18                         if (ap.Name == sp.Name)//判斷屬性名是否相同  
19                         {
20                             ap.SetValue(a, sp.GetValue(b, null), null);//獲得b對象屬性的值復制給a對象的屬性  
21                         }
22                     }
23                 }
24             }
25             catch (Exception ex)
26             {
27                 throw ex;
28             }
29         }
傳入A拷貝B

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM