2012-01-02 14 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) 
    { 

    } 
} 

Sopra è la classe, solo per un po 'di background.C# Riferimento dell'oggetto non impostato su un'istanza di un oggetto. Classe di istante in una lista?

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

Sul codice all'interno del metodo AddProduct è dove si trova l'errore indicato nel titolo.

Sto solo provando a creare un'istanza della classe e aggiungerla a una raccolta da visualizzare in una lista nel mio programma di moduli.

Il "addProduct" saranno chiamati su un evento click del pulsante

errore = NullReferenceException - riferimento oggetto non impostato a un'istanza di un oggetto.

Mi chiedevo se qualcuno sapeva perché questo stava accadendo poiché pensavo che dal momento che sto facendo una NUOVA istanza della classe mentre aggiungo alla lista che avrebbe qualcosa da fare riferimento anche. Grazie se qualcuno sa qual è il problema.

Modifica

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

Utilizzare il debugger, questo dovrebbe essere d'aiuto in futuro. –

+1

'// Elenco lstOrderitem = new List ();' era quasi corretto: è necessario rimuovere '// List ' part per renderlo un'inizializzazione di una proprietà membro piuttosto che una dichiarazione locale. – dasblinkenlight

+0

Ah, va bene, prova tutto questo e torna da te grazie ragazzi per avermi aiutato. – Taemint

risposta

20

Si dovrebbe inizializzare lstOrderitem proprietà nel costruttore, in questo modo:

EDIT

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

P.S. Microsoft suggerisce di iniziare i nomi delle proprietà in lettere maiuscole, per evitare confusione con le variabili membro, che dovrebbero essere denominate a partire da una lettera minuscola.

+0

"lstOrderItem è una proprietà scusa avrei dovuto includere quella parte. Modificato l'OP per mostrare questo – Taemint

+0

@Taelmit: anche se questa è una proprietà' auto' devi inizializzarla, come una risposta fornita e l'hai fatto. – Tigran

+0

Perché il compilatore non si lamenta quando proviamo a utilizzare una proprietà di istanza che non è stata inizializzata? – JayJay

3

Sembra che tu non abbia inizializzato il tuo riferimento lstOrderitem. Eseguire il debug del codice se il valore di riferimento è null, è necessario inizializzare lstOrderitem prima di utilizzarlo.

+0

"lstOrderItem è una proprietà scusa avrei dovuto includere quella parte. Modificato l'OP per mostrarlo – Taemint

0

Sembra che tu non abbia inizializzato il tuo riferimento lstOrderitem. Eseguire il debug del codice se il valore di riferimento è null, è necessario inizializzare lstOrderitem prima di utilizzarlo.

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