2016-07-10 2 views
0

Я получаю эту ошибку, и я не знаю, как ее разрешить.Значение не может быть нулевым. Имя параметра: источник в Asp.net

Трассировка стека:

[ArgumentNullException: Значение не может быть пустым. Имя параметра: источник] System.Linq.Enumerable.FirstOrDefault (IEnumerable'1 источник, Func'2 предикат) +4358562

eCommerce.Services.BasketService.addToBasket (HttpContextBase HttpContext, Int32 ProductID, количество Int32) в E: \ проекты \ C# \ электронной коммерции \ eCommerce.Services \ BasketService.cs: 51
eCommerce.WebUI.Controllers.HomeController.AddToBasket (Int32 идентификатор) в 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; 
} 

Пожалуйста, помогите мне, я застрял на некоторое время теперь

+1

Убедитесь, что 'BasketItems' не' null' –

ответ

0

Не зная, действительно ли значение GetBasket() возвращает значение или нет, я предполагаю, что он может не всегда возвращаться значение, поэтому мы проверяем значение null. Кроме того, basket может быть не ноль, но 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; 
     } 
+0

стил didnot работы я имел ту же ошибку в этой строке 'если (корзине! = NULL && basket.BasketItems.Any())' –

+1

Кроме того, необходимо ' && корзина.BasketItems! = null'. Ваша ошибка связана с тем, что 'BasketItems' является' null' –

+0

Обновлен пример выше, чтобы также искать нуль в корзине.BasketItems –

1

Всегда проверять нулевые значения при разыменовании. Положите в чеке, что GetBasket не вернул нуль, что basket.basketitems не имеет значения null до разыменования его и т. Д.

Смежные вопросы