不知道为什么它说“对象引用未设置为对象的实例”。

时间:2014-06-10 17:03:04

标签: asp.net asp.net-mvc nullreferenceexception

我整天都遇到了这个问题,我仍然无法弄明白为什么。

 public ActionResult AddToCart(string productcode, int productQty)
 {  
     var db = new PetaPoco.Database("ProductDB");
     var sql = Sql.Builder.Append("Select *");
     sql.Append("from Product");
     sql.Append("where Code= @0", productcode);
     Product product = db.SingleOrDefault<Product>(sql);


    Cart cart = GetCart();
    cart.AddToCart(product, productQty);
    return View(cart);

  }

这是我的GetCart()代码。

public Cart GetCart()
{
    Cart cart = (Cart)Session["cart"];
    if (cart == null)
    {
        cart = new Cart();
        Session["cart"] = cart;
    }

    return cart;
 }

这是我的AddToCart(Product p, int qty)代码。

public List<Product> AddToCart(Product p, int qty)
    {
        if (p != null)
        {
            cart.Add(p);
        }

        return cart;
    }

cart.Add(p)引发错误。有谁知道它为什么哭?

2 个答案:

答案 0 :(得分:0)

试试这个:

public Cart GetCart()
{

    if (Session["cart"]== null)
    {
        Cart cart = new Cart();
        Session["cart"] = cart;
        return cart;
    }
else
{
Cart cart = (Cart)Session["cart"];
return cart;
}


 }

public List<Product> AddToCart(Product p, int qty)
    {
        if (p != null && cart!=null)
        {
            cart.Add(p);
        }

        return cart;
    }

答案 1 :(得分:0)

在AddToCart中,名为List<Product>的{​​{1}}实例仍为空。可能它应该在构造函数中初始化。您可以保护您对cart实例代码编写

的访问权限
cart

但是,我想这个方法存在于Cart类中,因此确保产品列表初始化的最佳位置是构造函数

public List<Product> AddToCart(Product p, int qty)
{
    if (cart == null)
        cart = new List<Product>();
    if (p != null)
        cart.Add(p);
    return cart;
}

作为结局,我可以建议一点点重构。如果可能,请更改该变量的名称。如果一个变量具有相同的类名,只是大小写不同,这是令人困惑的。变量public class Cart { private List<Product> cart; public Cart() { cart = new List<Product>(); } public List<Product> AddToCart(Product p, int qty) { if(p != null) cart.Add(p); return cart; } } 也是不同的类型(cart