VB.NET中有用的通用对象列表

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

时间: 2024-10-31 03:18:39

VB.NET中有用的通用对象列表的相关文章

我的推荐:在VB.NET中寻找App

摘要 使用过Visual Basic 6的开发人员几乎都使用过App这个对象,它的功能强大人所共知,那么Visual Basic .NET中是否也有类似的对象呢?下面将会进一步说明. -------------------------------------------------------------------------------- 目录 1. App简介 2. 在VB.NET寻找类似功能 3. 简单示例 4. 小结 ----------------------------------

用vb语言创建的,可是留言之后,数据库中没有数据,留言列表没显示留言内容,是哪里错误啊???

问题描述 用vb语言创建的,可是留言之后,数据库中没有数据,留言列表没显示留言内容,是哪里错误啊???留言页面的代码:ImportsSystem.DataImportsSystem.Data.SqlClientImportsSystem.ConfigurationPartialClassDefault2InheritsSystem.Web.UI.PageProtectedSubButton1_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)H

在VB.NET中实现拖放操作

第一次在csdn上发文章,希望大家帮忙使劲顶,鼓励一下新手,谢谢 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/vbtchImpDragDrop.asp 在VB.NET中实现拖放操作 Implementing Drag and Drop in Visual Basic .NET Steve Hoag Visual Basic .NET Team Microsoft Corpor

VB.net中HOOK的应用(CNET中文网)

中文 VB.net中HOOK的应用 在vb.net版做版主有一阵子了,一直在思考怎么能更好地帮助大家理解vb.net的新概念与编程方法.小小的回贴很难说清楚很多问题,所以利用一下文档中心这片广阔的天地,进行更深入的探讨.本人水平有限,不免错误与遗漏多多,请朋友们批评指正. 基本的想法是,写一系列的文章,讲解一下vb.net与vb的区别,vb.net中的新概念,vb.net控件的使用,vb.net解决问题的新方法.如果时间允许,我希望自己能快快开展这个工作.更重要的是网友们的支持与鼓励会是我继续的

把握VB.NET中的流FileStream

stream 当你第一次用VB.NET读写文件的时候,你肯定会发现VB.NET摒弃了传统的文件I/O支持,感觉不习惯.其实,在.NET里面,微软用丰富的"流"对象取代了传统的文件操作,而"流",是一个在Unix里面经常使用的对象. 我们可以把流当作一个通道,程序的的数据可以沿着这个通道"流"到各种数据存储机构(比如:文件,字符串,数组,或者其他形式的流等).为什么我们会摒弃用了那么久的IO操作,而代之为流呢?其中很重要的一个原因就是并不是所有的数

在VB.NET中使用MS Access存储过程 — 第二部份

access|存储过程 在VB.NET中使用MS Access存储过程 - 第二部份 作者: David Wasserman, MCP4/18/2002译者:Qianqian(thousandvb@yeah.net)5/10/2002 文章源代码: msaccess_sp2.zip介绍欢迎来到MS Access存储过程的第二部分讨论.第一部分详细地描述了如何使用ADO.NET和Visual Basic.NET在Access中创建存储过程. 第二部分将会示范如何通过数据库访问层访问在第一部分已经创

在VB.NET中使用MS Access存储过程 — 第一部份

access|存储过程 在VB.NET中使用MS Access存储过程 - 第一部份 作者: DavidWasserman,MCP 2/27/2002 译者:Qianqian(thousandvb@yeah.net)3/8/2002 文章源代码: msaccess_ sp.zip 介绍 最新发布的MS Access中,微软已经尽努力使这种产品成为一个真正全功能的关系数据库系统. 存储过程,一个通常和企业数据库系统例如SQLServer相关的功能,现在也可以在Access里找到了. 自从Acces

在VB.NET中调试存储过程

存储过程 调试是编写应用程序的一个主要部分.Visual Studio .NET为自带的调试器提供了大量的增强性能,包括统一的调试界面.Web service调试以及跨语言调试.这种调试器的一个最有用的新功能体现在对存储过程的调试性能上.本文我将介绍在VS.NET中对SQL Server 2000存储过程进行调试的几种可选方法,以及你可能会遇到的一些配置问题. 许多商家使用SQL Server作为数据库,并将存储过程作为将数据返回VB中的机制,因此对存储过程进行逐步调试的能力成为开发的关键.Vi

进一步深入Ruby中的类与对象概念

  这篇文章主要介绍了进一步深入Ruby中的类与对象概念,包括集成与多态等更多知识点的整理,需要的朋友可以参考下 Ruby是纯面向对象的语言,所有项目似乎要Ruby中为一个对象.Ruby中的每个值是一个对象,即使是最原始的东西:字符串,数字甚至true和false.即使是一个类本身是一个对象,它是Class类的一个实例.本章将通过所有功能涉及到Ruby的面向对象. 类是用来指定对象的形式,它结合了数据表示和方法操纵这些数据,转换成一个整齐的包.在一个类的数据和方法,被称为类的成员. Ruby类的