首页 > 解决方案 > 在下面的代码片段中使用列表时,AddressOf 运算符如何在 VB.net 中工作

问题描述

Private Sub btnByPrice_Click(sender As Object, e As EventArgs) Handles btnByPrice.Click

    stockList.Sort(AddressOf CompareByPrice)



    stockList.Sort()
    DisplayList()


End Sub


Private Function CompareByPrice(x As Stock, y As Stock) As Integer
    If chkDescending.Checked Then
        Return y.Price.CompareTo(x.Price)
    End If
    Return x.Price.CompareTo(y.Price)

End Function

标签: vb.net

解决方案


AddressOf操作员创建一个委托,它是一个引用方法的对象。这允许您像传递任何其他对象一样传递一个方法,并在您喜欢的任何地方调用它,即使在没有直接引用该方法所属的对象的地方也是如此。

List(Of T).Sort方法接受具有两个类型参数的方法的委托,T并返回一个Integer以指示它们的相对大小。任何小于零的结果都被解释为第一个对象小于第二个对象,任何大于零的结果被解释为第一个对象大于第二个对象,零的结果被解释为两个对象相等。

排序几乎总是通过一次比较两个项目并在必要时重新排列它们来完成,然后根据需要一遍又一遍地重复,直到项目有序为止。选择项目进行比较和重新排列的方式将根据算法而改变,但比较和重新排列步骤仍然存在。

每次该Sort方法需要比较列表中的两个项目时,它都会调用您提供的委托并将这两个项目作为参数传入,然后使用结果来决定是否重新排列这些项目。这样,您可以以任何您想要的方式对任何类型的项目进行排序,而无需编写自己的排序例程。列表本身已经知道如何排序,您只需提供特定的比较代码,列表就会使用它,而不必关心它的实际来源。


推荐阅读