利用反射將資料讀入實體類

2021-04-12 12:17:10 字數 1080 閱讀 2926

利用反射將資料讀入實體類

在實際開發中,我們經常需要從資料庫中讀取資料並賦值給實體類的相應屬性。 比如:

public role getroles(int blogid)

if(reader["name"]!=dbnull.value)

if(reader["description"]!=dbnull.value)

//readertoobject(reader,role);

al.add(role);

} }

finally

return (role)al.toarray(typeof(role));

} 對於上面的**,我覺得有幾點不優雅之處:

1、每次對role的屬性進行賦值時,都要檢查reader的值是否為dbnull,出現了很多重複**

2、每次對role的屬性進行賦值時,都要進行型別轉換, 而role屬性的型別是已知的,是不是可以自動完成這樣的轉換?

3、每次對role的屬性進行賦值時,都要進行role屬性與資料庫欄位的對應。如果我們在設計資料庫與實體類時,保證資料庫欄位與實體類屬性採用同樣的名稱,那利用反射,我們可以通過**自動進行屬性與字段的對應。即使資料庫欄位與屬性不同名,我們也可以通過更改查詢語句,來做到這一點。

是不是可以對上面的**進行改進,使**變得更優雅?那優雅的**應該是什麼樣的呢?如果我們用上面**中注釋的**行readertoobject(reader,role);取代它之前的對role屬性進行賦值的語句,是不是會使**變得更優雅?readertoobject的作用就是自動完成將reader中的值寫入到role中對應的屬性中(前提是reader中的字段與role中對應的屬性具有相同的名稱)。現在我們的任務就是實現readertoobject, 有了強大的**—reflection,我們的任務就變得很輕鬆, 也不多說了,下面的**是我的實現方法:

private void readertoobject(idatareader reader,object targetobj)

{for(int i=0;i

利用反射將實體類物件轉成Map

在我們程式設計的過程中往往會用到反射,利用反射有時候可以更容易的做到一些事情,下面就說乙個反射的實際應用場景吧,就是將object轉化成乙個map,object裡的屬性名對應map的key,object裡的屬性值對應map的value public static mapobjecttomap obj...

C 反射實體類

using system using system.collections.generic using system.text using system.reflection namespace easysrcoreclass.component.utilcomponent 設定屬性值 public...

C 利用反射實現實體類List索引器

在專案開發中,我們經常會自定義一些實體類,在某些需要動態賦值的功能中,我們無法知道到下乙個需要賦值的欄位名稱是什麼,只知道會從其他返回需要賦值的欄位名稱和值,這時候就需要實現索引器了,就像c datatable中的行索引器一樣,可以根據欄位名稱實現查詢和賦值,如下所示 datatable dt ne...