VB.NET的通用集合、成员类、设计模式问题

VB.NET的通用集合、成员类、设计模式问题,vb.net,generics,Vb.net,Generics,我有一门课叫Person: Public Class Person Private PersonID as String Private Name as String Private Records as GenericCollection(Of PublicRecord) Public Sub New(ByVal ID as String) Me.PersonID = ID Me.Name = getPersonName(

我有一门课叫Person:

Public Class Person    
     Private PersonID as String    
     Private Name as String   
     Private Records as GenericCollection(Of PublicRecord)

Public Sub New(ByVal ID as String)   
 Me.PersonID = ID    
 Me.Name = getPersonName(ID)  
End Sub

'Get/Sets
End Class
getPersonName只是一个函数,它完全按照所描述的那样工作。GenericCollection类如下所示:

Public Class GenericCollection(Of ItemType)
    Inherits CollectionBase
    ' Purpose: Provides a generic collection class from which all other collections
    ' classes can be inherited if they wish to extend the functionality below.

#Region "Public Methods"
    Public Function Add(ByVal NewObject As ItemType) As Integer
        Return MyBase.InnerList.Add(NewObject)
    End Function

    Public Sub New()
        MyBase.New()
    End Sub
#End Region

#Region "Public Properties"
    Default Public Property Item(ByVal Index As Integer) As ItemType
        Get
            Return CType(MyBase.InnerList(Index), ItemType)
        End Get
        Set(ByVal value As ItemType)
            MyBase.InnerList(Index) = value
        End Set
    End Property
#End Region
End Class
PublicRecord类别为:

Public Class PublicRecord
    Private RecordID As String
    Private RecordDataOne As String
    Private RecordDataTwo As String

    Public Sub New()
        MyBase.New()
    End Sub

    'Get/Sets
End Class
我被告知可以做到的一个要求是,我应该能够抓取一组人员中的所有人员,因为所有这些人员都将拥有一组记录。。。从记录集合中获取一组特定的数据

我们会说,我想:getPersonOverage21(),从Persons集合中的每个Person内的记录集合中


这可能吗?如果是这样,有人能解释一下它是如何工作的吗?

没有必要实现自己的泛型集合类。Net已在System.Collections.Generic命名空间中为您完成此操作。查看一个
列表(个人)
,甚至只是一个简单的
IEnumerable(个人)

现在,您还没有解释记录对象与您的个人类型的关系,或者它们包含什么数据,所以我只能推测下一部分。但听起来好像你想要这样的东西:

Dim people As List(Of Person) = GetPeopleFromDatabase() 
Dim peopleOver21 As IEnumerable(Of Person) = people.Where(Function(p) p.Age >= 21)

你不明白这其中的哪一部分?你试过这个吗?让我们看看你试过什么。我可以把所有的人都收集到一个(人的)一般集合中。我假设我必须遍历GenericCollection(Of Person)并对集合的每个索引运行GetPersonOverage21():PersonCollection(0).Records.GetPersonOverage21(),但这可以在不进行实际迭代的情况下完成吗?PublicRecord对象只是Person类中的一个列表(Of PublicRecord)。一个人有多个公共记录,因此这些记录的集合在类中。人。记录就是那个集合。而且,我没有LINQ-to-SQL的奢侈。Joel正在演示LINQ-to-Object的使用。只是注意到。。。这可能行得通。不过我还不太确定。
Dim peopleOver21Query = From p In people _
                        Where (p.Age >= 21) _
                        Select p