系统.ArgumentNullException:值不能为空.参数名称:source
本文关键字:参数 source ArgumentNullException 不能 系统 | 更新日期: 2023-09-27 18:14:08
这里我的代码是它显示你传递的参数是空的:-
[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();
}
}
出现异常是因为—正如Lucero已经提到的—Seats
是null
。与通常的方法相反,这里没有NullReferenceException
,因为Count
是一个扩展方法:
public static int Count(this IEnumerable<T> source)
{
if (source == null) throw new ArgumentNullException("source");
}
因此,正如您所看到的,如果source
是null
,则该方法抛出ArgumentNullException
而不是NullReferenceException
。
顺便说一下,不要使用Count
来检查集合是否有项,而是使用Any
,因为它不会枚举整个集合,而是在找到第一个匹配条件时返回。
编辑:如果你要使用另一个方法,这是一个正常的实例方法,你会得到一个NRE:
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";
}
如果没有匹配的数据/查询参数调用该方法,则座椅将为空。您还需要检查,例如:
[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));
}
}