前段時間做了乙個練手的小專案,名叫book_bar,用來賣書的,採用的是三層架構,也就是models,idal,dal,bll 和 web , 在dal層中各個類中有乙個方法比較常用,那就是rowtoclass ,顧名思義,也就是將datatable 中的資料封裝到models 中。結果導致在dal各個類中寫了很多類似的方法,後來就直接把它抽取出來做成了datatable和datarow的擴充套件方法,下面是**:
using system;
using system.collections.generic;
using system.data;
using system.reflection;
namespace dal
list.add(t);
t = default(t);
}return list;
} ///
/// 功能:
/// datarow的擴充套件方法;
/// 能夠將datarow物件封裝到泛型物件中
///
/// 需要轉換成為的class型別
/// 被轉換的行
/// 封裝了行資料的class物件
public static t rowtoclass(this datarow row)
return t;
} ///
/// 功能:
/// datarowcollection的擴充套件方法;
/// 能夠將datarowcollection物件封裝到泛型list集合中
///syqxjeqr
/// 程式設計客棧
/// 程式設計客棧》
///
public static list rowtoclass(this datarow row, datarow[ rowarr)
list.add(t);
t = default(t);
}return list;
} }}
上面用到了泛型,反射,擴充套件方法。
之前在使用這行**時出了點小問題:
proparr[i].setvalue(t, row[i]);
報了乙個型別轉換異常,斷點除錯之後發現是因為 models 中的屬性的排列和資料表的列的順序不一樣導致的,參照資料表中字段的順序修改過來就好,還有一點就是在迴圈對屬性進行賦值時,我選用的是資料表中列的個數,而不是屬性的個數,(也就是**中這裡之所以不使用proparr.length,是因為有些models的屬性在資料表中不存在對應的列
本文標題: c#中反射和擴充套件方法如何運用
本文位址:
C 如何擴充套件方法
我們在使用.net或第三方類庫時,根據業務需要需增加乙個函式類處理,但又不想在其他類中呼叫只想在原有類中呼叫,又不能直接修改原始碼,該如何實現呢?這時我們可以用擴充套件方法實現。這裡我們以在system.string中增加乙個將字串轉換為int32輸入的函式為例來講解如何定義和使用擴充套件方法 1 ...
C 中擴充套件方法
什麼是擴充套件方法?擴充套件方法顧名思義,就是允許向現有的 型別 新增方法,而無需建立派生類 重新編譯或以其他方式修改原來型別。擴充套件方法是一種特殊的靜態方法,但可以像擴充套件型別上的例項方法一樣進行呼叫。擴充套件方法和例項方法有何區別?通常只有在不得已 例如 不能修改原來的型別 的情況下才實現擴...
c 反射 判斷函式是否為擴充套件方法
c methodinfo內並沒有字段用來標識該方法是否為擴充套件方法。目前只能通過自己擴充套件來判斷方法是否為擴充套件方法,如下 static ienumerablegetextensionmethods assembly assembly,type extendedtype 核心 就一句 meth...