我想排序一個實現IEnumerable的VB類。 我不想要一個新的對象/ linq。 它必須保持原始對象,但排序。 這是一個示例類。VB.NET排序IEnumerable類
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」進行排序,而不是一個新的「人物」排序列表。
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」。
這是一個選項,但在查詢對象之前,其他一些方法會填充對象。因此,某種「Sort」方法/功能會更好。像這樣的東西http://danielsaidi.wordpress.com/2009/08/27/sort-ienumerable-and-list-with-property-name/,但在VB中。 – goroth
@goroth查看我的更新答案替代 –
我喜歡更新的答案,但它不能在我的機器上使用.NET 3.5進行編譯...行Func(Person,T) - 「數組邊界不能出現在類型說明符中「 – goroth