2016-09-09 1 views
0

Lässt annehmen, ich habe Forum mit einem Thread mit 3 Posts.Sammlung mit Unterkollektion

Ich möchte dieses Endergebnis erhalten:

Dim MyFourm As new Fourm 
MyFourm.Thread.Add(545)''for ex 545 mean Thread ID. 

MyForum.Thread(0).Post(1).Username 

Thema sollte Sammlung von integer (= Thread ID) sein Beitrag Sammlung der Post Typ sein sollte * Ich möchte nicht Wörterbuch verwenden

Also in diesem Fall sagt der Code etwas wie "wähle ersten Thread, und den zweiten Post und benutze den Benutzernamen, wer diesen Beitrag schreibt".

Nach wenig spielen, schreibe ich diesen Code:

Public Class MainFrm 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     Dim MyForum As New Forum 
     MyForum.Thread.Add(500)' some id's 
     MyForum.Thread.Add(120) 

     MyForum.Thread(0).Posts.Add(New ForumPost() With {.PostContent = "Therad ID: 500 | Post: 1#", .Username = "Don"}) 
     MyForum.Thread(0).Posts.Add(New ForumPost() With {.PostContent = "Therad ID: 500 | Post: 2#", .Username = "Shon"}) 
     MyForum.Thread(0).Posts.Add(New ForumPost() With {.PostContent = "Therad ID: 500 | Post: 3#", .Username = "Ron"}) 

     MyForum.Thread(1).Posts.Add(New ForumPost() With {.PostContent = "Therad ID: 120 | Post 1#", .Username = "Emi"}) 


     For iThread = 0 To MyForum.Thread.Count - 1 
      For iPost = 0 To MyForum.Thread(iThread).Posts.Count - 1 
       Static Pst As New ForumPost 
       Pst = MyForum.Thread(iThread).Posts(iPost) 
       Console.WriteLine($"Content:{Pst.PostContent}, Username who post it:{Pst.Username}") 
      Next 
     Next 
    End Sub 
End Class 
Public Class Forum 
    Public Property Thread As New ThreadCollection 

End Class 

Public Class ForumThread 
    Inherits List(Of Integer) 
    Public Property Posts As New PostCollection 
    Sub New(id As Integer) 

    End Sub 
End Class 

Public Class ThreadCollection 
    Inherits List(Of ForumThread) 
    Public Overloads Sub Add(ByVal id As Integer) 
     MyBase.Add(New ForumThread(id)) 
    End Sub 

End Class 

Public Class ForumPost 
    Public Property Username As String 
    Public Property PostContent As String 
End Class 

Public Class PostCollection 
    Inherits List(Of ForumPost) 
End Class 



' Content:Therad ID: 500 | Post: 1#, Username who post it:Don 
' Content:Therad ID: 500 | Post: 2#, Username who post it:Shon 
' Content:Therad ID: 500 | Post: 3#, Username who post it:Ron 
' Content:Therad ID: 120 | Post 1#, Username who post it:Emi 

Seine Arbeit in Ordnung, aber meine Frage, ob sein Schreib gut? Oder ist es möglich, es irgendwie zu verbessern?

Antwort

0

Ihre Typen sollen wie folgt aussehen:

Public Class Post 

    Public Property Username As String 

    'Other members 

End Class 

Public Class Thread 

    Private _posts As New List(Of Post) 

    Public ReadOnly Property Posts As List(Of Post) 
     Get 
      Return _posts 
     End Get 
    End Property 

    'Other members 

End Class 

Public Class Forum 

    Private _threads As New List(Of Thread) 

    Public ReadOnly Property Threads As List(Of Thread) 
     Get 
      Return _threads 
     End Get 
    End Property 

    'Other members 

End Class 

, dass das Muster in dem gesamten .NET Framework, zum Beispiel verwendet ist myDataSet.Tables(0).Rows(1).Item(2).

In VB 2015, können diese letzten beiden Klassen dieses kollabiert werden:

Public Class Thread 

    Public ReadOnly Property Posts As List(Of Post) = New List(Of Post) 

    'Other members 

End Class 

Public Class Forum 

    Public ReadOnly Property Threads As List(Of Thread) = New List(Of Thread) 

    'Other members 

End Class 

Wenn Sie benutzerdefinierte Funktionen wollen, dann sollten Sie die System.Collections.ObjectModel.Collection(Of T) Klasse erben, anstatt List(Of T) und dann Eigenschaften dieses Typs deklarieren, z.B.

Public Class Thread 

    Public ReadOnly Property Id As Integer 

    Public ReadOnly Property Posts As List(Of Post) = New List(Of Post) 

    Public Sub New(id As Integer) 
     Me.Id = id 
    End Sub 

    'Other members 

End Class 

Public Class ThreadCollection 
    Inherits Collection(Of Thread) 

    Public Sub AddNew(id As Integer) 
     Me.Add(New Thread(id)) 
    End Sub 

End Class 

Public Class Forum 

    Public ReadOnly Property Threads As ThreadCollection = New ThreadCollection 

    'Other members 

End Class 
+0

Vielen Dank. was ich suche. – Yoal223

+0

Wenn diese Antwort Ihr Problem gelöst hat, stellen Sie sicher, dass Sie es akzeptieren. – jmcilhinney