2009-05-07 19 views
9

जोड़ नहीं सकता है मैं पहली बार जेनेरिक की कोशिश कर रहा हूं और मुझे कोई समस्या है।सी # संपत्ति के रूप में उपयोग की जाने वाली वस्तुओं की जेनिक्स सूची - मूल्य

मैं एक dll कि बैचों

  • वहाँ एक "संदेश" वर्ग और कि dll

  • बैच वर्ग पर

    में एक "बैच" वर्ग है में संदेश भेजता है, मैं कुछ सार्वजनिक है गुण

  • बैच वर्ग के सार्वजनिक संपत्तियों की पर

    एक संपत्ति "संदेश" कहा जाता है जो "संदेश" वर्ग की एक सूची है इस प्रकार है:

    public List<Message> Messages {get;set;} 
    

विधि 1

मैं तो एक परीक्षण exe जहाँ मैं "बैच" वर्ग पर गुण सेट करना चाहते हैं इस प्रकार है:

Batch myBatch = new Batch() 
myBatch.Messages.Add(
    new MyNameSpace.Message(txtToAddress.Text, txtMessage.Text)); 

जब मैं अनुप्रयोग चलाने, मुझे मिलता है:

"ऑब्जेक्ट संदर्भ किसी ऑब्जेक्ट के उदाहरण पर सेट नहीं है।"

विधि 2

थोड़ा चारों ओर खेलने के बाद, मुझे लगता है कि मैं सफलतापूर्वक कर सकते हैं परीक्षण exe में निम्नलिखित:

List<MyNameSpace.Message> myMessages = new List<MyNameSpace.Message>(); 
myBatch.Messages.Add(
new MyNameSpace.Message(txtToAddress.Text, txtMessage.Text)); 
myBatch.Messages = myMessages; 

मैं चाहूँगा यह पहली बार में काम पाने के लिए जिस तरह से अन्य प्रोग्रामर डीएलएल का उपयोग करेंगे और यह पहला दृष्टिकोण उपयोग करने के लिए अधिक सहज लगता है।

काम करने की पहली विधि पाने के लिए मुझे क्या याद आ रही है?

उत्तर

20

आम तौर पर, संग्रह पैरेंट ऑब्जेक्ट से प्रारंभ कर रहे हैं:

public List<Message> Messages {get; private set;} 

public Batch() { // constructor 
    Messages = new List<Message>(); 
} 

अब यह अपेक्षा के अनुरूप काम करना चाहिए। ध्यान दें कि यदि आप XmlSerializer उपयोग कर रहे हैं आप सार्वजनिक सेट भी रखने के लिए की आवश्यकता होगी ...

कुछ मायनों में, लंबे समय से हाथ संपत्ति कोड यहाँ आसान है:

private List<Message> messages = new List<Message>(); 
public List<Message> Messages { get {return messages; } } 

(कोई कंस्ट्रक्टर्स से खिलवाड़ , आदि)

2

आपको अपनी सूची को तुरंत चालू करने की आवश्यकता है।

अपने contstructor

Messages = new List<Message>(); 
1
Batch myBatch = new Batch() 
myBatch.Messages.Add(

को यह जोड़े एक नया batchthe संदेश सूची शायद अभी तक नहीं बनाया गया है बनाने के बाद। बैच के निर्माता में सूची बनाएं।

1

Batch वर्ग के निर्माता में, Messages संपत्ति की सूची बना:

public Batch() { 
    Messages = new List<Messages>(); 
} 
1

आपकी बैच वर्ग निर्माता में शायद सूची का उदाहरण बनाकर सबसे अच्छा होगा के लिए जिम्मेदार होना चाहिए था जगह।

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