熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

運用反射給實體賦值

2013-11-13 09:44:19  來源: .NET編程 

  在系統開發過程中有一些代碼是必須反復 寫的比如實體的賦值過程(不用實體的免看)

  Eg: XXXxxx=XXX

  雖然可以通過codesmith來生成賦值但是免不了代碼冗長如果是根據數據庫生成的話我們還要刪除非必要的屬性而且過分依賴數據庫

  特別是當你需要不同實體之間進行相同屬性拷貝時你必須一個屬性一個屬性賦值實在太煩了

  我在做個java項目時無意發現了一個PropertyUtils類就是用來屬性復制的類探究原理之後發現其裡也是同樣可以實現的

<的反射就是實現的辦法. using System.Reflection;

  /// <summary>
  /// 對象屬性拷貝(全匹配拷貝)
  /// </summary>
  /// <param name="obj1">源對象</param>
  /// <param name="obj2">目標對象</param>
  /// <returns>目標對象</returns>
  public static object PropertyCopy(object obj1,object obj2)
  {
   Type souType=obj1.GetType();
   Type tarType = obj2.GetType();
   PropertyInfo[] pis=souType.GetProperties(BindingFlags.Public | BindingFlags.Instance);
   if(null!=pis)
   {
    foreach(PropertyInfo pi in pis)
    {
     string propertyName=pi.Name;
     PropertyInfo pit=tarType.GetProperty(propertyName);
     if(pit !=null)
     {
      pit.SetValue(obj2,pi.GetValue(obj1,null),null);
     }
    }
   }
   return obj2;

  }

  實際上可以只傳兩個Type進來也可以的.

  但是這個有個問題,就是當兩個實體的同名屬性類型不匹配時,會拋意外.我這個只是個例子,沒有try出來.

  基本原理就是這樣子.呵呵.我的代碼風格一般,估計看壞大家的眼睛了.

  我自己做了個類似Nhibernate的數據綁定(暫時支持單表),完善ing.呵呵有空再切磋咯

  如果有什麼問題,歡迎大家指正


From:http://tw.wingwit.com/Article/program/net/201311/11457.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.