2012-01-02 18 views
9
public class OrderItem 
{ 
    public string ProductName { get; private set; } 
    public decimal LatestPrice { get; private set; } 
    public int Quantity { get; private set; } 
    public decimal TotalOrder { get {return LatestPrice * Quantity;}} 

    public OrderItem(string name, decimal price, int quantity) 
    { 

    } 

    public OrderItem(string name, decimal price) : this(name, price, 1) 
    { 

    } 
} 

बस कुछ पृष्ठभूमि के लिए कक्षा है।सी # ऑब्जेक्ट संदर्भ किसी ऑब्जेक्ट के उदाहरण पर सेट नहीं है। एक सूची के भीतर कक्षा को तत्काल?

public void AddProduct(string name, decimal price, int quantity) 
{ 
    lstOrderitem.Add(new OrderItem(name, price, quantity));   
} 

addProduct विधि के अंदर कोड पर जहाँ मैं शीर्षक में कहा गया है त्रुटि हो रही है है।

मैं बस कक्षा को तुरंत चालू करने और अपने फॉर्म प्रोग्राम पर एक सूची बॉक्स में प्रदर्शित होने के लिए एक संग्रह में जोड़ने की कोशिश कर रहा हूं। वस्तु संदर्भ एक वस्तु का एक उदाहरण के लिए सेट नहीं -

"addProduct" एक बटन क्लिक करें घटना

त्रुटि = NullReferenceException पर बुलाया जाएगा।

मैं सोच रहा था कि अगर कोई जानता था कि यह क्यों हो रहा था क्योंकि मैंने सोचा था कि चूंकि मैं इस सूची में जोड़ने के दौरान कक्षा का एक नया उदाहरण बना रहा हूं, इसके संदर्भ में कुछ भी होगा। धन्यवाद अगर कोई जानता है कि समस्या क्या है।

संपादित

public List<OrderItem> lstOrderitem{ get; private set; } 
    public int NumberOfProducts { get; private set; } 
    public decimal BasketTotal { get; private set; } 

    public ShoppingBasket() 
    { 
     //List<OrderItem> lstOrderitem = new List<OrderItem>(); 
    } 

    public void AddProduct(string name, decimal price, int quantity) 
    { 
     lstOrderitem.Add(new OrderItem(name, price, quantity)); 


    } 
+0

डीबगर का उपयोग करें, इससे आपको भविष्य में मदद करनी चाहिए। –

+1

'// सूची lstOrderitem = नई सूची ();' लगभग सही था: आपको स्थानीय घोषणा के बजाए सदस्य संपत्ति का आरंभ करने के लिए '// सूची ' भाग को हटा देना चाहिए। – dasblinkenlight

+0

आह ठीक है बीमार इस सब को आजमाएं और मेरी मदद करने के लिए धन्यवाद दोस्तों को वापस आएं। – Taemint

उत्तर

20

आप निर्माता में lstOrderitem संपत्ति को प्रारंभ करना चाहिए, इस तरह:

संपादित

public MyClass() { 
    lstOrderitem = new List<OrderItem>(); 
} 

पी.एस. माइक्रोसॉफ्ट ने सदस्य चर के साथ भ्रम से बचने के लिए पूंजी अक्षरों में अपनी संपत्तियों के नाम शुरू करने का सुझाव दिया है, जिसे लोअरकेस अक्षर से शुरू किया जाना चाहिए।

+0

"lstOrderItem एक संपत्ति है, मुझे उस भाग को शामिल करना चाहिए था। इसे – Taemint

+0

@Taelmit दिखाने के लिए ओपी संपादित किया गया: भले ही यह एक 'ऑटो' प्रॉपर्टी है, आपको इसे प्रारंभ करना होगा, जैसा कि प्रदान किया गया उत्तर और आपने किया था। – Tigran

+0

क्यों संकलक तब शिकायत नहीं करता है जब हम किसी इंस्टेंस प्रॉपर्टी का उपयोग करने का प्रयास करते हैं जिसे प्रारंभ नहीं किया गया है? – JayJay

3

ऐसा लगता है कि आपने अपना संदर्भ lstOrderitem प्रारंभ नहीं किया है। यदि आपका संदर्भ मान null है, तो आपको अपना कोड डीबग करें, आपको इसका उपयोग करने से पहले lstOrderitem प्रारंभ करना होगा।

+0

"lstOrderItem एक संपत्ति है खेद है कि मुझे उस हिस्से को शामिल करना चाहिए था। इसे दिखाने के लिए ओपी संपादित किया गया – Taemint

0

ऐसा लगता है कि आपने अपना संदर्भ lstOrderitem प्रारंभ नहीं किया है। यदि आपका संदर्भ मान शून्य है, तो आपको अपना कोड डीबग करें, आपको इसे उपयोग करने से पहले lstOrderitem प्रारंभ करने की आवश्यकता है।

public MyClass() { 
    lstOrderitem = new List<OrderItem>(); 
} 
संबंधित मुद्दे

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