2010-02-26 5 views
2

J'ai une classe appelée personne:Collections génériques, Classes membres, conception question de modèle pour VB.NET

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 est tout simplement une fonction qui fait exactement comme il est décrit. classe GenericCollection est la suivante:

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 

classe PublicRecord est:

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 

L'une des exigences que j'ai été dit peut être fait est que je devrais être en mesure de saisir toutes les personnes dans une collection de Personnes, puis puisque toutes ces personnes auront des collections de documents en leur possession ... saisir un ensemble spécifique de données de la collection de documents.

Nous allons dire, je veux: getPersonsOverAge21() à partir de la collection d'enregistrements à l'intérieur de chaque personne à l'intérieur de la collection de personnes.

Est-ce encore possible? Si oui, quelqu'un peut-il expliquer comment cela fonctionnerait?

+0

Quelle partie de ce ne comprends pas? Avez-vous essayé? Montre-nous ce que tu as essayé. –

+0

Je peux saisir toutes les personnes dans une collection générique (de personne). Je suppose que je dois itérer la GenericCollection (de la personne) et exécuter getPersonsOverAge21() sur chaque index de la collection: PersonCollection (0) .Records.getPersonsOverAge21() Mais peut-il être fait sans réellement itérer ? – jlrolin

Répondre

1

Vous n'avez pas besoin d'implémenter votre propre classe de collection générique. .Net l'a déjà fait pour vous dans l'espace de noms System.Collections.Generic. Regardez un List(Of Person) ou même simplement un IEnumerable(Of Person).

Maintenant, vous n'avez pas expliqué comment vos objets d'enregistrement se rapportent à votre type de personne ou quelles données ils contiennent, donc je ne peux que spéculer sur la partie suivante. Mais cela semble un peu comme vous voulez quelque chose comme ceci:

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

L'objet PublicRecord est simplement une liste (Of PublicRecord) dans la classe Person. Une personne a plusieurs dossiers publics, donc une collection d'entre eux est dans la classe. personnes.Records serait cette collection. – jlrolin

+0

En outre, je n'ai pas le luxe de LINQ-to-SQL. – jlrolin

+0

Joel démontre l'utilisation de LINQ to Objects. – Dan

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