C 中反射和擴充套件方法如何運用

2022-09-26 04:15:07 字數 1290 閱讀 6692

前段時間做了乙個練手的小專案,名叫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...