要使用List(of T)我們需要了解如何部署NET框架所提供的多種方法這也將是本文要介紹的內容我已經編寫好了三個示例——使用ForEach FindAll和Sort——來闡述同樣列表類的工作原理
第一步是要創建一個同用列表你可以從多種途徑獲取數據但是最簡單的方法是添加文本中我們會編寫代碼以便為舉例中的集來分類因此下面我們就來講講創建集的代碼
首先我需要一個能代表集中的Bottle的對象為此而編寫的代碼是完全符合標准的而且事實上VBNET Express Intellisense會為你寫好大部分的代碼以下是我的對象
Public Class Bottle
internalProperties
Public Property Brand() As String
Public Property Name() As String
Public Property Category() As String
Public Property Size() As Decimal
Public Sub New( _
End Sub
End Class
為了創建集我需要添加項目
Dim Cabinet As List(Of Bottle) = _
New List(Of Bottle)
CabinetAdd(New Bottle( _
Castle Creek _
Uintah Blanc _
Wine ))
CabinetAdd(New Bottle( _
Zion Canyon Brewing Company _
Springdale Amber Ale _
Beer ))
CabinetAdd(New Bottle( _
Spanish Valley Vineyards _
Syrah _
Wine ))
CabinetAdd(New Bottle( _
Wasatch Beers _
Polygamy Porter _
Beer ))
CabinetAdd(New Bottle( _
Squatters Beer _
Provo Girl Pilsner _
Beer ))
所有的這些都是VBNET中的標准代碼但是要通過定義我們自己的Bottle對象來注明我們會在相同集中的多類型中獲益
下面我們將介紹ForEach FindAll 和Sort方法
我們使用這些方法的時候就會發現其中的樂趣了首先讓我們部署ForEach方法微軟文件包含了其使用句法定義
Dim instance As List
Dim action As Action(Of T)
instanceForEach(action)
微軟進一步將委派行為定義為一種可以將對象傳遞的行為進行演示的一種方法目前的List(T)要素是單獨傳送到Action(T)代表的
第一件要做的事就是需要編寫被委派方法的代碼對這一關鍵點存在誤區是大部分人對於VBNET感到困惑的原因該項功能或子程序是所有用於Of類型對象的自定義編碼所完成的場所當我們能夠正確使用這一功能時過程就很簡單在我們的舉例中對它的使用很簡單Bottle的整個示例都被傳送了且子程序會從中抽選出任何需要的數據
Sub displayBottle(ByVal b As Bottle)
ConsoleWriteLine(bBrand & & bName)
End Sub
編寫ForEach方法本身是很簡單的只需要填寫代表的地址就可以了
CabinetForEach(AddressOf displayBottle)
FindAll稍微有些復雜微軟關於FindAll的說明如下
Dim instance As List
Dim match As Predicate(Of T)
Dim returnValue As List(Of T)
returnValue = instanceFindAll(match)
現在在我們的句法中出現了不同的要素Predicate(T)據微軟稱
這將代表定義了一套標准以及能確定指定對象是否符合這些標准的方法換句話說我們可以創建任何能在列表中找尋數據的代碼我編寫的Predicate(Of T)可以對Beer種類進行搜尋
Function findBeer(ByVal b As Bottle) _
As Boolean
If (bCategory = Beer) Then
Return True
Else
Return False
End If
End Function
FindAll返回的是整個List(T)而不是調用列表中每個項目的代表代碼這個List(T)只包含匹配Predicate(T)的數據對第二個List(T)的定義和操作也取決於我們編寫的代碼重復一遍我的代碼是為免冗繁而簡化了
Dim sublist As List(Of Bottle)
sublist = CabinetFindAll(AddressOf findBeer)
For Each result As Bottle In sublist
ConsoleWriteLine(resultBrand & & resultName)
Next
本文探討的最後一個方法是Sort微軟使用了一些你或許並不熟悉的術語對其進行解釋其實有四個不同的Sort方法負載
Sort()
Sort(Icomparer(T)
Sort(Comparison(T)
Sort(IntIntIcomparer(T)
這讓我們能夠用NET框架中定義的Sort方法編寫自己的代碼或者只是通過使用起始位置和計數參數來收集集合的一部分
在這個例子中我為自己的比較器編寫了另一個代表由於我希望通過我的分類方式來分類於是就只是抽去了傳所送的Bottle對象中每個例子的值
Private Shared Function sortCabinet( _
ByVal x As Bottle ByVal y As Bottle) As Integer
Return xCategoryCompareTo(yCategory)
End Function
Sort方法實際上對原始List(T)進行了重新排列所以這就是該執行該方法後發生的一個過程
CabinetSort(AddressOf sortCabinet)
For Each result As Bottle In Cabinet
ConsoleWriteLine(resultBrand & & resultName)
Next
這些方法被選擇用來闡述List(T)中編寫框架方法代碼的主要方式你會發現它們使得List(T)更加有用
From:http://tw.wingwit.com/Article/program/net/201311/12090.html