C#对象引用未设置为对象的实例。在列表中实例化类?

时间:2012-01-02 14:12:29

标签: c# list object collections encapsulation

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”
  

Error = 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 个答案:

答案 0 :(得分:23)

您应该在构造函数中初始化lstOrderitem属性,如下所示:

修改

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

P.S。 Microsoft建议以大写字母开始使用属性名称,以避免与成员变量混淆,成员变量应以小写字母开头。

答案 1 :(得分:3)

您似乎没有初始化参考lstOrderitem。如果参考值为null,请调试代码,在使用之前需要初始化lstOrderitem

答案 2 :(得分:0)

看起来您没有初始化您的参考 lstOrderitem 。如果参考值 null ,请调试代码,在使用之前需要初始化 lstOrderitem

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