Jas*_*son 2 asp.net sorting generics icomparable
目前我有一个实现IComparable接口的对象(ASP.NET 3.5,VB).当我将几个实例化对象放入泛型列表时,我会通过简单的方式对它们进行排序someList.Sort.我的CompareTo()功能是:
Public Function CompareTo(ByVal obj As Object) As Integer Implements
System.IComparable.CompareTo
'default is number of votes (opposite direction, highest first)'
Dim sent As Sentence = CType(obj, Sentence)
Return Not Points.CompareTo(sent.Points)
End Function
Run Code Online (Sandbox Code Playgroud)
这很好,除了现在我需要按另一个属性DateSubmitted属性排序作为Points的子集.例如,如果三个句子有投票:3,1,1,我希望第一个(显然)得票最多的那个和一个投票的两个句子,那么最早提交的一个要列出.
这可能是CompareTo(),或者我应该再次点击数据库并在那里排序?
谢谢
您的CompareTo()函数不正确.您需要为三种状态(<,=和>)返回正确的结果,这Not意味着该函数只能正确处理其中两种状态.如果在足够大的列表上调用该函数,这将导致问题.
正如MehrdadA已经提到的,.Net 3.5有一种更简单的方法来处理它.但是如果由于某种原因你无法处理lambda表达式,这里是如何做到的:
Public Function CompareTo(Of Sentence)(ByVal obj As Sentence) As Integer _
Implements System.IComparable.CompareTo(Of Sentence)
If obj Is Nothing Return 1
Dim result As Integer = Points.CompareTo(obj.Points) * -1
If result = 0 Then result = DateSubmitted.CompareTo(obj.DateSubmitted)
Return result
End Function
Run Code Online (Sandbox Code Playgroud)
请注意,您现在要实现IComparable(Of T),而不是IComparable.