C# 值不能为null,参数名称:source
我将对象集合发送到我的viewmodel,如下所示 控制器C# 值不能为null,参数名称:source,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,我将对象集合发送到我的viewmodel,如下所示 控制器 SoundsViewModel model = new SoundsViewModel(sound, AllGroups()); 视图模型 public SoundsViewModel(sound, List<LocationGroup> allGroups) { .... Groups = new List<SoundLocationGroupVie
SoundsViewModel model = new SoundsViewModel(sound, AllGroups());
视图模型
public SoundsViewModel(sound, List<LocationGroup> allGroups)
{
....
Groups = new List<SoundLocationGroupViewModel>();
if (allGroups !=null)
{
foreach (var item in allGroups)
{
var i = (from r in sound.LocationGroups where r.Id == item.Id select r).FirstOrDefault();
Groups.Add(new SoundLocationGroupViewModel() { LocationGroupId = item.Id, LocationGroupName = item.Name, IsInLocationGroup = (i != null) });
}
}
}
显然,这条消息在描述情况时似乎是完美和清晰的,但在消除bug时,我在viewmodel上填充并正确接收了allGroups集合
任何想法,都已经晚了,如果有人能给我一个建议,告诉我如何在明天早上的咖啡中解决这个问题,我将不胜感激
谢谢
更新:
现在已经过去了
foreach (var item in allGroups)
{
if(sound.LocationGroups !=null)
{
var i = (from r in sound.LocationGroups where r.Id == item.Id select r).FirstOrDefault();
Groups.Add(new SoundLocationGroupViewModel() { LocationGroupId = item.Id, LocationGroupName = item.Name, IsInLocationGroup = (i != null) });
}
}源代码可能来自FirstOrDefault()扩展方法:
public static TSource FirstOrDefault<TSource>(this IEnumerable<TSource> source)
因为它的价值在于源代码仍然来自Linq扩展方法,而不是我所认为的方法。由于sound.LocationGroups
是null
异常来自linq语句编译到的扩展方法(我猜Where
)。是sound.LocationGroups
null
?我会尝试执行var groups=sound.LocationGroups,然后执行groups.FirstOrDefault(o=>o.Id==item.Id);@PaulMcCowat,这仍然会产生相同的错误。null
检查正常;或者初始化为空集合。谢谢,我应该把它放进去。我要说的是扩展你的观点,消除null的可能性UserViewModel
构造函数的第一个参数是什么?看起来非常无效的C#这个声音
东西。它来自哪里?您是否确保它不为空?
public static TSource FirstOrDefault<TSource>(this IEnumerable<TSource> source)
bool isInGroup;
var q = (from r in sound.LocationGroups where r.Id == item.Id select r);
isInGroup = (q != null && q.Any());
Groups.Add(new SoundLocationGroupViewModel()
{
LocationGroupId = item.Id,
LocationGroupName = item.Name,
IsInLocationGroup = isInGroup
});