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

    } 
} 

Above es la clase, solo para algunos antecedentes.C# Referencia del objeto no establecida en una instancia de un objeto. ¿Instanciando clase dentro de una lista?

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

En el código dentro del método AddProduct es donde obtengo el error indicado en el título.

Solo intento crear una instancia de la clase y agregarla a una colección para que se muestre en un cuadro de lista en mi programa de formulario.

El "addProduct" se llamará en un evento de clic de botón

= Error NullReferenceException - Referencia a objeto no establecida como instancia de un objeto.

Me preguntaba si alguien sabía por qué estaba ocurriendo ya que pensé que ya que estoy haciendo una nueva instancia de la clase al tiempo que añade a la lista que tendría algo que hacer referencia también. Gracias si alguien sabe cuál es el problema.

Editar

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

Utilice el depurador, esto debería ayudarlo en el futuro. –

+1

'// List lstOrderitem = new List ();' era casi correcto: debe eliminar la parte '// List ' para que sea una inicialización de una propiedad miembro en lugar de una declaración local. – dasblinkenlight

+0

Ahh bien intentaré todo esto y me pondré en contacto con ustedes gracias por ayudarme. – Taemint

Respuesta

20

Debe inicializar lstOrderitem propiedad en el constructor, como esto:

EDITAR

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

P. S. Microsoft sugiere comenzar los nombres de sus propiedades en letras mayúsculas, para evitar confusiones con las variables miembro, que deberían nombrarse comenzando con una letra minúscula.

+0

El "lstOrderItem es una propiedad, lo siento, debería haber incluido esa parte. Edité el OP para mostrar – Taemint

+0

@Taelmit: incluso si se trata de una propiedad' auto', debe inicializarla, como una respuesta proporcionada y lo hizo. – Tigran

+0

¿Por qué? el compilador no se queja cuando intentamos usar una propiedad de instancia que no se ha inicializado? – JayJay

3

Parece que no inicializó su referencia lstOrderitem. Depure su código si su valor de referencia es null, necesita inicializar lstOrderitem antes de usarlo.

+0

"lstOrderItem es una propiedad, lo siento, debería haber incluido esa parte. Editado el OP para mostrar esto – Taemint

0

Parece que no inicializó su referencia lstOrderitem. Depure su código si su valor de referencia es nulo, debe inicializar lstOrderitem antes de usarlo.

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