要使用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)更加有用