2016-10-20 3 views
-12

здесь мой код, показывающий его параметр, который вы прошли равно нуль: -System.ArgumentNullException: значение не может быть нулевым. Имя параметра: источник

[HttpPost] 
public String Indexhome(IEnumerable<Seat> Seats) 
{ 
    if (Seats.Count(x => x.IsSelected) == 0) 
    { 
      return "you didnt select any seats"; 
    } 
    else 
    { 
      StringBuilder sb = new StringBuilder(); 
      sb.Append("you selected"); 
      foreach (Seat seat in Seats) 
      { 
       if (seat.IsSelected) 
       { 
        sb.Append(seat.Name + " ,"); 
       } 
      } 
      sb.Remove(sb.ToString().LastIndexOf(","), 1); 
      return sb.ToString(); 
    } 
} 
+0

сначала отформатируйте его правильно –

ответ

1

места будут аннулированы, если вы вызываете метод без согласования аргумента данных/запроса. Вы должны также проверить, что, например, так, например:

[HttpPost] 
public String Indexhome(IEnumerable<Seat> Seats) 
{ 
    if ((Seats == null) || !Seats.Any(s => s.IsSelected)) 
    { 
      return "you didnt select any seats"; 
    } 
    else 
    { 
      return "you selected " + string.Join(", ", Seats.Where(s => s.IsSelected).Select(s => s.Name)); 
    } 
} 
+0

Yup его показывает, что вы не выбрали места, пока выбрали места! –

+0

@DebashishDwivedi Да, вам нужно проверить формат данных, которые вы отправляете, это не соответствует. – Lucero

+0

Я выбираю сидения bt его показ u не выбрал никаких мест –

0

Исключение появляется потому, что, - как Лусеро уже упоминает - Seats является null. В отличие от обычного метода вам не получить NullReferenceException здесь, потому что Count является расширением-метод:

public static int Count(this IEnumerable<T> source) 
{ 
    if (source == null) throw new ArgumentNullException("source"); 
} 

Итак, как вы видите, метод генерирует ArgumentNullException вместо NullReferenceException если source является null.

В качестве альтернативы не используйте Count, чтобы проверить, есть ли в вашей коллекции предметы, вместо этого используйте Any, так как он не перечисляет полную коллекцию и не возвращает, когда было найдено самое первое совпадение с условием.

EDIT: Если You'd собирается использовать другой метод, который является нормальным экземпляром метод you'd получает ЯРД однако:

Seats.DoSomething(); // throws NRE when Seats = null 

Поэтому проверить, если аргумент null перед использованием:

[HttpPost] 
public String Indexhome(IEnumerable<Seat> Seats) 
{ 
    if (Seats == null || !Seats.Any(x=> x.IsSelected)) 
     return "you didnt select any seats"; 
} 
Смежные вопросы