泛型集合的使用

2021-09-08 19:53:31 字數 2512 閱讀 8033

對於機房收費系統的重構。從大的方面來看。無非就是對於資料庫的四個操作。增刪改查。而且我們用的是三層架構進行重構。d層用來和資料庫打交道。進行這四個操作就須要有返回值,增刪改在這裡不多說。可是當進行查的時候。d層須要資料給b層,那麼我們以什麼樣的形式返回最好呢?

剛開始接觸三層的時候,我返回的是datatable,就是dt.rows[0][「***」]的形式,感覺實現了。就非常厲害了,後來通過與大家交流發現,事實上另一種更好用的方法。就是利用實體類填充泛型集合。

那麼問題就出來了:

1.泛型集合是什麼?

2.為什麼說用它會更好?

泛型,顧名思義就是泛泛的型別. 也就是沒有確定的型別. 那麼沒有確定型別怎麼使用呢?實際上。使用的時候規定型別即可了. 

集合,就是一種處理多個資料型別的類。而且一般你會在多個應用程式中使用同乙個集合的多種不同的形式。你不須要每次依據草稿建立集合,而是使用泛型建立乙個泛型類原型(prototype)。

在使用的時候,依據須要處理的資料型別。將list尖括號裡的t換成相應的型別,並建立相應的例項就能夠使用了.

首先。你須要給**加入例如以下所看到的的

imports

語句:imports system.collections.generic

加入imports

語句之後。你就能夠建立泛型類了。主要的類看起來非經常見。你能夠使用屬性、函式、子程式、欄位或能夠在類中使用的其他不論什麼東西。

public class converthelperentity

public shared function converttolist(of t as )(byval dt as datatable) as ilist(of t)

'將datatable 轉換成泛型集合

dim mylist as new list(of t) '定義終於返回的集合

dim mytype as type = gettype(t) '得到實體類的型別名

dim dr as datarow '定義行集

dim tempname as string = string.empty '定義乙個暫時變數

'遍歷datatable全部資料行

for each dr in dt.rows

dim myt as new t '定義乙個實體類的物件

dim propertys() as propertyinfo = myt.gettype.getproperties() '定義屬性集合

dim pr as propertyinfo

'遍歷該物件的全部屬性

for each pr in propertys

tempname = pr.name '將屬性名稱賦給暫時變數

'檢查datatable 是否包括此列(列名==物件的屬性名)

if (dt.columns.contains(tempname)) then '將此屬性與datatable裡列名相比較。檢視datatable是否包括此屬性

'推斷此屬性是否有setter

if (pr.canwrite = false) then '推斷此屬性是否可寫。假設不可寫。則跳出迴圈

continue for

end if

dim value as object = dr(tempname) '定義乙個物件型的變數來儲存列的值

if (value.tostring <> dbnull.value.tostring()) then '假設非空,則賦給物件的屬性

pr.setvalue(myt, value, nothing) '在執行期間。通過反射,動態的訪問乙個物件的屬性

end if

end if

next

mylist.add(myt) '加入到集合

next

return mylist '返回實體集合

end function

end class

我們須要在實體層,加入乙個實體類,

由於建立集合的基礎是要有類,然後才幹將物件放入集合中。

那麼我們為什麼要說它比datatable要好呢?用泛型集合,我們

在d層把datatable轉換成單個實體類,再把實體類填充到泛型集合中。

其核心思想圖:

將其優缺點進行對照可得:

datatable

list

很easy寫錯,編譯器不檢查

按一下點,自己出來。不會寫錯

必須了解資料庫的結構

不必了解資料庫結構

不符合物件導向思想

符合物件導向思想

datatable為弱型別。無法直觀的看出欄位的資料型別。

實體類的屬性是強型別,每乙個欄位的型別都是已知的。

通過學習泛型集合,真正的了解了,乙個程式實現功能或許不是最重要的。如何使**最簡單,易擴充套件,如何做到最能為他人著想,才是我們要去做的。

泛型集合,非泛型集合

arraylist 非泛型集合 list 泛型集合 集合跟陣列比較我們更容易理解。陣列 1,長度固定2,資料型別預先宣告 集合 1,長度可變2,資料型別預先宣告的為泛型集合,資料型別不限定為非泛型 arraylist 長度不固定,元素資料型別為object的集合。object類之間或間接為所有類的父...

C 泛型 泛型集合Dictionary

在system.collections.generic命名空間中,與arraylist相對應的泛型集合是list,與hashtable相對應的泛型集合是dictionary,其儲存資料的方式與雜湊表相似,通過鍵 值來儲存元素,並具有泛型的全部特徵,編譯時檢查型別約束,讀取時無須型別轉換。本儲存的例子...

泛型在集合上的使用

1.泛型 一般用在集合上 比如把乙個集合裡面的值放在乙個集合裡,這個時候,這個值放入集合之後,失去本身的型別,只能是object型別 這個時候,想要對這個值進行型別轉換,很容易出現型別轉換錯誤,這個時候就可以使用泛型來解決這個問題 在集合上如何使用?常用集合 list set map 泛型語法 集合...