Объект C# не задана ссылка на экземпляр объекта. Создание экземпляра класса в списке?

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 ответов


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

редактировать

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

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


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


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

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