VB.Net程序设计:IComparer的应用,按两个不同类的某个属性比较排序

比较方法:两个不同的类,其中有一个属性是相同类型的,如日期,或者字符。

自定义IComparer,实现比较方法。

Imports System.Runtime
Imports System.Collections

Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim ArList As New ArrayList
        With ArList
            .Add(New Duty(Date.Now, "now"))
            .Add(New DutyTemp(Date.Today, "today"))
            .Add(New Duty(Date.Today.AddHours(1), "today+1h"))
            .Add(New DutyTemp(Date.Today.AddDays(1), "today-1day"))
            .Add(New Duty(Date.Today.AddHours(-1), "today-1h"))
            .Add(New Duty(Date.Today.AddDays(5), "today-5day"))
            .Add(New DutyTemp(Date.Today.AddDays(-8), "today-8day"))
        End With
        ArList.Sort(New DutyComparer)
        For Each obj As Object In ArList
            Debug.Print(obj.ToString)
        Next
    End Sub

End Class

Public Class DutyComparer
    Implements IComparer

    Public Function Compare(x As Object, y As Object) As Integer Implements System.Collections.IComparer.Compare
        Dim dtm1, dtm2 As Date
        Select Case x.GetType
            Case GetType(Duty)
                dtm1 = CType(x, Duty).DateFrom
            Case GetType(DutyTemp)
                dtm1 = CType(x, DutyTemp).TimeFrom
        End Select
        Select Case y.GetType
            Case GetType(Duty)
                dtm2 = CType(y, Duty).DateFrom
            Case GetType(DutyTemp)
                dtm2 = CType(y, DutyTemp).TimeFrom
        End Select
        Return Date.Compare(dtm1, dtm2)
    End Function
End Class

'--如果兩個不同類可以抽象處理,實現相同接口,就比較容易點。
Public Class Duty

    Property DateFrom As Date
    Property DutyName As String

    Sub New(dtmFrom As Date, strName As String)
        DateFrom = dtmFrom
        DutyName = strName
    End Sub

    Public Overrides Function ToString() As String
        Return String.Format("{0}-{1}", DateFrom.ToString, DutyName)
    End Function

End Class

Public Class DutyTemp

    Property TimeFrom As Date
    Property DutyTempName As String

    Sub New(dtmFrom As Date, strName As String)
        TimeFrom = dtmFrom
        DutyTempName = strName
    End Sub

    Public Overrides Function ToString() As String
        Return String.Format("{0}-{1}", TimeFrom.ToString, DutyTempName)
    End Function

End Class


对比结果:


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值