我想对实现IEnumerable的VB类进行排序。我不需要新对象/ linq。它必须保留为原始对象但已排序。这是一个示例类。
Public Class Person
Public Sub New(ByVal fName As String, ByVal lName As String)
Me.firstName = fName
Me.lastName = lName
End Sub
Public firstName As String
Public lastName As String
End Class
Public Class People
Implements IEnumerable(Of Person)
Private _people() As Person
Public Sub New(ByVal pArray() As Person)
_people = New Person(pArray.Length - 1) {}
Dim i As Integer
For i = 0 To pArray.Length - 1
_people(i) = pArray(i)
Next i
End Sub
Public Function GetEnumerator() As IEnumerator(Of Person) _
Implements IEnumerable(Of Person).GetEnumerator
Return DirectCast(_people, IEnumerable(Of Person)).GetEnumerator
End Function
Private Function System_Collections_GetEnumerator() As IEnumerator _
Implements IEnumerable.GetEnumerator
Return Me.GetEnumerator
End Function
End Class
我知道我可以使用LINQ,但是随后我得到一个新对象,而不是原始排序的对象。使用全局“ peopleList”对象的地方太多了,因此我需要对“ peopleList”进行排序,而不是对“ People”进行新排序。
Dim peopleList As New People({ _
New Person("John", "Smith"), _
New Person("Jim", "Johnson"), _
New Person("Sue", "Rabon")})
Dim newPeopleList = From person In peopleList Order By person.firstName Select person
'OR
Dim newPeopleList = DirectCast(peopleList, IEnumerable(Of Person)).ToList()
newPeopleList.Sort(Function(p1, p2) p1.firstName.CompareTo(p2.firstName))
我需要更多类似以下内容的东西。
Dim peopleList As New People({ _
New Person("John", "Smith"), _
New Person("Jim", "Johnson"), _
New Person("Sue", "Rabon")})
peopleList = peopleList.Sort(Function(p) p.firstName)
我知道IEnumerable没有Sort方法。我仅以示例为例。我确实可以修改“ People”类,但是最后它仍然必须实现IEnumerable,因为我不想破坏当前的调用者。另外,当前的呼叫者必须能够看到已排序的“ peopleList”。
您可以Person
在创建People
列表时对对象进行排序:
Public Sub New(ByVal pArray() As Person)
_people = New Person(pArray.Length - 1) {}
Dim i As Integer = 0
For
For Each person In pArray.OrderBy(Function(p) p.firstName)
_people(i) = person
i = i + 1
Next i
End Sub
或者,您可以提供自己的方法来对内部数组进行创建后对其进行排序。这样的事情应该起作用:
Public Class People
Public Sub Sort(Of T As IComparable)(KeySelector As Func(Of Person, T))
Array.Sort(_people, Function(x, y) KeySelector(x).CompareTo(KeySelector(y)))
End Sub
End Class
您可以像这样调用:
peopleList.Sort(Function(p) p.firstName)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句