值不能为空。参数名称:Asp.net中的source

时间:2016-07-10 04:01:01

标签: c# asp.net asp.net-mvc asp.net-mvc-5

我收到此错误,但我不知道如何解决。

堆栈跟踪:

  

[ArgumentNullException:Value不能为null。参数名称:来源]   System.Linq.Enumerable.FirstOrDefault(IEnumerable'1 source,Func'2   谓语)+4358562

     

eCommerce.Services.BasketService.addToBasket(HttpContextBase   httpcontext,Int32 productid,Int32 quantity)in   E:\项目\ C#\电子商务\ eCommerce.Services \ BasketService.cs:51
  eCommerce.WebUI.Controllers.HomeController.AddToBasket(Int32 id)in   E:\项目\ C#\电子商务\ eCommerce.WebUI \控制器\ HomeController.cs:34

这是代码:

public bool addToBasket(HttpContextBase httpcontext, int productid, int quantity)
{
    bool success = true;

    Basket basket = GetBasket(httpcontext);

    // this line throws the error
    BasketItem item = basket.BasketItems.FirstOrDefault(i => i.ProductId == productid);

    if (item == null)
    {
        item = new BasketItem()
            {
                BasketId = basket.BasketId,
                ProductId = productid,
                Quantity = quantity
            };
        basket.BasketItems.Add(item);
    }
    else
    {
        item.Quantity = item.Quantity + quantity;
    }

    baskets.Commit();

    return success;
}

请帮助我,我已经被困了一段时间

2 个答案:

答案 0 :(得分:1)

取消引用时始终检查空值。检查一下GetBasket没有返回null的检查,在取消引用它之前,basket.basketitems不为null,等等。

答案 1 :(得分:0)

在不知道GetBasket()是否总是返回值的情况下,我会假设它可能并不总是返回一个值,所以我们检查null。此外,basket可能不是null,但BasketItems可能是这样,让我们​​检查该对象是否有任何值。

如果两个条件都为真,那么我们继续执行剩下的代码。如果没有,那么我们返回false。您还可以在此处创建一条消息,以记录或返回有关篮子为空/空的用户。

public bool addToBasket(HttpContextBase httpcontext, int productid, int quantity)
        {
            bool success = true;

            Basket basket = GetBasket(httpcontext);

            // Not sure if GetBasket always returns a value so checking for NULLs 
            if (basket != null && basket.BasketItems != null && basket.BasketItems.Any())
            {
                BasketItem item = basket.BasketItems.FirstOrDefault(i => i.ProductId == productid);

                if (item == null)
                {
                    item = new BasketItem()
                    {
                        BasketId = basket.BasketId,
                        ProductId = productid,
                        Quantity = quantity
                    };
                    basket.BasketItems.Add(item);
                }
                else
                {
                    item.Quantity = item.Quantity + quantity;
                }

                baskets.Commit();

                success = true;
            }
            else
            {
                // Basket is null or BasketItems does not contain any items. 
                // You could return an error message specifying that if needed.
                success = false;
            }

            return success;
        }