運用反射給實體賦值

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

Eg: XXX.xxx=XXX

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

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

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

.net的反射就是實現的辦法. 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.呵呵有空再切磋咯

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章