C # Ссылка на объект не установлена ​​на экземпляр объекта. Создание класса в списке? - PullRequest
9 голосов
/ 02 января 2012
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));


    }

Ответы [ 3 ]

23 голосов
/ 02 января 2012

Вы должны инициализировать свойство lstOrderitem в конструкторе, например:

РЕДАКТИРОВАТЬ

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

PS Microsoft предлагает начинать имена ваших свойств прописными буквамибуквы, чтобы избежать путаницы с переменными-членами, имена которых должны начинаться со строчной буквы.

3 голосов
/ 02 января 2012

Похоже, вы не инициализировали свою ссылку lstOrderitem. Отладка вашего кода, если значение ссылки null, вам необходимо инициализировать lstOrderitem перед его использованием.

0 голосов
/ 18 сентября 2013

Похоже, вы не инициализировали свою ссылку lstOrderitem . Отладка вашего кода, если ваше ссылочное значение равно null , вам необходимо инициализировать lstOrderitem перед его использованием.

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