开发者

Generic Collections, Member Classes, Design Pattern question for VB.NET

I have a class called 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 is simply a function that does exactly as it is described. GenericCollection class is as follows:

Public Class GenericC开发者_如何学JAVAollection(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 class is:

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

One of the requirements I've been told can be done is that I should be able to grab all Persons in a Collection of Persons, then since all of those Persons will have Collectinos of Records within them... grab a specific set of data from the Collection of Records.

We'll say, I want to: getPersonsOverAge21() from the Collection of Records inside each Person inside the Collection of Persons.

Is this even possible? If so, can someone explain how it would work?


There's no need to implement your own generic collection class. .Net has already done this for you in the System.Collections.Generic namespace. Look at a List(Of Person) or even just a simple IEnumerable(Of Person).

Now you haven't explained how your record objects relate to your person type or what data they contain, so I can only speculate on the next part. But it sounds kind of like you want something like this:

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


Dim peopleOver21Query = From p In people _
                        Where (p.Age >= 21) _
                        Select p
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜