2009-10-14 14 views
5

ढेर Overflowers होने के लिए:VB.NET एक वर्ग संपत्ति की जरूरत है एक सूची सरणी

मैं (टी) के एक सूची प्राप्त करने के लिए सरणी टाइप एक वर्ग की संपत्ति होने की कोशिश कर मेरे मस्तिष्क रैकिंग की है। मुझे पता है कि इसे करने का एक आसान तरीका होना चाहिए और मुझे Google पर एक अच्छा उदाहरण नहीं मिल रहा है। हर बार जब मैं एक वर्ग बनाता हूं जो मुझे लगता है कि काम करेगा, तो मुझे इसका उपयोग करने का प्रयास करते समय "ऑब्जेक्ट रेफरेंस ऑब्जेक्ट के उदाहरण पर सेट नहीं किया गया" त्रुटि प्राप्त होती है। मेरी सोच अब यह है कि मैं जिस तरह से उम्मीद कर रहा था उसमें मैं इसका उपयोग नहीं कर सकता।

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 

मैं इस तरह एक परीक्षण समारोह से MasterItem वर्ग वापस जाने के लिए कोशिश कर रहा हूँ: यहाँ मेरी नवीनतम प्रयास है

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 

क्या मैं गलत यहाँ कर रहा हूँ? अग्रिम में धन्यवाद।

+0

सूचियां सरणी नहीं हैं। – recursive

+0

आप सही हैं - यह एक संग्रह है। देर हो चुकी थी जब मैंने इसे टाइप किया। – NinjaBomb

उत्तर

12

आपने उस सूची का उदाहरण नहीं बनाया है जिसे आप आइटम रखने की कोशिश कर रहे हैं।

इसे अपने सहायक वर्ग के निर्माता में आरंभ करें।

1) दृष्टिकोण elder_george उल्लेख किया है, जहां वर्ग का एक नया उदाहरण के लिए संपत्ति को प्रारंभ:

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() 

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

तरह आप 2 विकल्प NullReferenceException से बचने के लिए है इस दृष्टिकोण के साथ समस्या यह है कि यदि आप इसे कहीं भी प्रारंभ नहीं करते हैं, तो आप जानते हैं कि यह हमेशा बाद में उपयोग करने के लिए मान्य होगा, आपको वही जांच करना होगा और/या प्रारंभ करना होगा। वह "कहीं" एक फॉर्म लोड या ऐसे पर हो सकता है।

2) संपत्ति के बैकिंग स्टोर वैरिएबल को आरंभ करें। इसे एक बार करें और आपको हर समय शून्य की जांच करने की आवश्यकता नहीं है। नीचे _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 
जगह में ऊपर के साथ

, तो आप सीधे के रूप में का उपयोग होगा:

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

मुझे पता था कि यह कुछ आसान था जिसे मैंने अभी देखा था। विकल्प # 2 पूरी तरह से मेरी स्थिति फिट होगा। धन्यवाद। – NinjaBomb

+0

कुछ अतिरिक्त शोध करने और दोनों सुझावों का परीक्षण करने के बाद big_george के पोस्ट में मेरा जवाब दिया गया जवाब बदल दिया। – NinjaBomb

0

कुछ इस तरह की कोशिश ..

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 

यह मेरे साथ काम कर रहा है ...

संबंधित मुद्दे