程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 利用反射自己寫的一個ModelHelper類

利用反射自己寫的一個ModelHelper類

編輯:關於C語言

 

開發中 很多人都會使用BLL Model這種開發,我也是,雖然現在有很多的自動生成工具,能在幾秒內生成cs的模板,但我個人還不是很喜歡,我還是喜歡自己一個一個去寫,這樣更能了解自己的代碼。

不過手動編寫的時候,最討厭的就是GetModel這類方法了,把datarow的數據轉換成一個Model,實在寫的我頭疼,因為很多代碼基本上都是一樣的,一直想用反射來寫這樣一個方法,以後只要調用一個方法就能完成Model的賦值,那樣就方便了。今天又遇到此類代碼了,一時火大,自己寫了個方法,采用的反射的原理(從BlogEngine裡學來的),或許這個方法比較笨拙,或許有其他更好的方法來實現,不過目前是能滿足我的GetModel的需求了,也就湊活著放上來,希望大家能給我更好的建議。

廢話不說了 代碼如下:

public class ModelHelper <T> where T : new()
  {
    public static T ConvertModel(DataRow dr)
    {
      T t = new T();
      Type modelType = t.GetType();
      foreach (PropertyInfo p in modelType.GetPropertIEs())
      {
        p.SetValue(t, GetDefaultValue(dr[p.Name], p.PropertyType), null);
      }
      return t;
    }

    private static object GetDefaultValue(object obj, Type type)
    {
      if (obj == DBNull.Value)
      {
        obj = default(object);
      }
      else
      {
        obj = Convert.ChangeType(obj, type);
      }
      return obj;
    }

  }

范例:

Model model = ModelHelper<Model>.ConvertModel(DataRow)

ConvertModel靜態方法就是轉換的,GetDefaultValue方法則是獲取object的默認值的,因為從DataRow裡取到的值,有時候是DBNull,如果直接賦值的話會Throw錯誤的。

不好的地方:

1、Model類必須與DataRow的列名一一對應

2、Model類我設定了必須要有析構器的

代碼或許不是很理想,希望大俠們指點一二。

Email:[email protected]

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved