我在VB.net工作但是.Net或者基础知识中的任何例子都会受到赞赏。我有几个继承相同基类的类。在基类中有一个integer类型的属性。我想根据基类中的这个属性对各个类的几个列表进行排序。我熟悉.Sort使用共享函数的地址来排序对象列表。我遇到的问题是有几个不同类的不同列表,我想将它们全部排序为一个大的列表。对于任何反馈,我们都表示感谢。 谢谢。大卫
答案 0 :(得分:1)
听起来很适合在你的基类中实现IComparable
,然后在列表中使用包含从基类派生的所有对象的.Sort()
方法:
Class MyClass
Implements IComparable(Of MyClass)
Private m_MySortValue As Integer
#Region "IComparable<MyClass> Members"
Public Function CompareTo(other As MyClass) As Integer
If Me.m_MySortValue < other.m_MySortValue Then
Return -1
ElseIf Me.m_MySortValue > other.m_MySortValue Then
Return 1
Else
Return 0
End If
End Function
#End Region
End Class
如果您需要在排序之前将所有对象放入一个大列表中,您可以使用Concat
或只创建一个新列表并使用AddRange
添加其他列表中的所有元素。
答案 1 :(得分:0)
以下是基类的转换派生类的示例:
示例类:
Public Class Book
Inherits Item
Public Property Author As String = ""
End Class
Public Class Tape
Inherits Item
Public Property Artist As String = ""
End Class
Public Class Item
Public Property Name As String = ""
Public Property Price As Double = 0.0
Public Property Quantity As Double = 0.0
Public Overloads Function ToString() As String
Return Price.ToString
End Function
End Class
代码:
Dim list1 As New List(Of Book)(
{
New Book With {.Price = 1.0},
New Book With {.Price = 2.0}
})
Dim list2 As New List(Of Tape)(
{
New Tape With {.Price = 3.0},
New Tape With {.Price = 0.95}
})
Dim list3 As List(Of Item) = (From item1 In New List(Of Item)(list1).Concat(list2)
Order By item1.Price
Select item1).ToList
这将从派生类返回基类列表,该派生类按基类中的特定属性排序。需要注意的是,新列表是基类类型,并且不具有派生类的任何特定属性/方法。