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