首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

利用反射自己寫的一個 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 方法則是取得物件的預設值的,因為從 DataRow 裡取到的值,有時候是 DBNull,如果直接賦值的話會 Throw 錯誤的。

不好的地方:

  1. Model 類別必須與 DataRow 的欄位名一一對應
  2. Model 類別我設定了必須要有建構函式

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

Email: dally_2000@163.com

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved