2009-10-14 17 views
5

Stos Overflowers:VB.NET trzeba właściwość klasy się lista tablica

I zostały regały mój mózg próbuje uzyskać List (T) typu tablicę być własnością klasy. Wiem, że musi być prosty sposób na zrobienie tego i nie mogę znaleźć dobrego przykładu na google. Za każdym razem, gdy tworzę klasę, która, jak sądzę, będzie działać, otrzymuję błąd "Nie odwołuję się do obiektu obiektu" podczas próby jego użycia. Teraz myślę, że nie mogę tego użyć w sposób, w jaki miałem nadzieję. Oto moja najnowsza próba:

Public Class Item 
    Private _itemno As String 
    Public Property ItemNo() As String 
     Get 
      Return _itemno 
     End Get 
     Set(ByVal value As String) 
      _itemno = value 
     End Set 
    End Property 
     //Many more properties in here 
End Class 


Public Class Accessory 
    Private _items as List(of Item) 
    Public Property Items() As List(of Item) 
     Get 
      Return _itemno 
     End Get 
     Set(ByVal value As List(of Item)) 
      _itemno = value 
     End Set 
    End Property 
End Class 

Public Class MasterItem 
    Private _item as Item 
    Public Property PrimaryItem as Item 
     Get 
      Return _item 
     End Get 
     Set(ByVal value As Item) 
      _item = value 
     End Set 
    End Property 

    Private _accessories as Accessory 
    Public Property Accessories() As Accessory 
     Get 
      Return _accessories 
     End Get 
     Set(ByVal value As Accessory) 
      _accessories = value 
     End Set 
    End Property 
End Class 

Próbuję przywrócić klasy MasterItem z funkcji testowej tak:

Public Shared Function GetItem() as MasterItem 
    Dim testItem as new MasterItem 

    ReturnItem.PrimaryItem.ItemNo = "TEST123" 

    ReturnItem.Accessories.Items.add(New Item("TESTACC1")) 
    ReturnItem.Accessories.Items.add(New Item("TESTACC2")) 

    Return testItem 
End Function 

Co robię źle tutaj? Z góry dziękuję.

+0

Listy nie są tablicami. – recursive

+0

Masz rację - to kolekcja. Było późno, kiedy go napisałem. – NinjaBomb

Odpowiedz

12

Nie utworzyłeś instancji listy, do której próbujesz wprowadzić elementy.

Zainicjuj go w konstruktorze swojej klasy akcesoriów. Coś jak

Public Sub New() 
    _items = New List(Of Item) 
End Sub 
1

Masz 2 opcje, aby uniknąć NullReferenceException:

1) elder_george podejście wspomniano, gdzie można zainicjować obiekt do nowej instancji klasy:

Dim ReturnItem As New MasterItem 
ReturnItem.PrimaryItem = New Item() 
' or check for null then initialize (optional, depends on your needs) 
If ReturnItem.PrimaryItem Is Nothing Then ReturnItem.PrimaryItem = New Item() 

The Problem z tym podejściem polega na tym, że jeśli nie zainicjujesz go gdzieś, o którym wiesz, że zawsze będzie można go użyć później, będziesz musiał zrobić to samo i/lub zainicjować. To "gdzieś" może znajdować się przy ładowaniu formularzy lub takich.

2) Zainicjuj zmienną bazy danych zaplecza nieruchomości. Zrób to raz i nie musisz ciągle sprawdzać wartości zerowej. Zwróć uwagę na zmiany w deklaracji poniżej _item:

Public Class MasterItem 
    Private _item as Item = New Item() 
    Public Property PrimaryItem as Item 
     Get 
      Return _item 
     End Get 
     Set(ByVal value As Item) 
      _item = value 
     End Set 
    End Property 
End Class 

z powyższym w miejscu, mamy do nich dostęp bezpośrednio jako:

Dim ReturnItem As New MasterItem 
ReturnItem.PrimaryItem.ItemNo = "TEST123" 
+0

Wiedziałem, że to jest coś prostego, po prostu nie przestawałem patrzeć. Opcja nr 2 idealnie pasuje do mojej sytuacji. Dzięki. – NinjaBomb

+0

Zmieniono moją zaakceptowaną odpowiedź na wpis elder_george po wykonaniu dodanych badań i testowaniu obu sugestii. – NinjaBomb

0

spróbować coś takiego ..

Public Class ActiveInfo 
    Private _services As List(Of ActiveService) 

    Public Sub New() 
     _services = New List(Of ActiveService) 
    End Sub 
    Public Property Services() As List(Of ActiveService) 
     Get 
      Return _services 
     End Get 
     Set(ByVal value As List(Of ActiveService)) 
      _services = value 
     End Set 
    End Property 
End Class 

To działa dobrze ze mną ...

Powiązane problemy