我收到此错误,但我不知道如何解决。
堆栈跟踪:
[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;
}
请帮助我,我已经被困了一段时间
答案 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;
}