考虑以下部分视图代码片段
List<sellingPrice> Prices = ViewBag.Prices;
foreach (var mgmp in mg.messageGroup.messageGroupMessagePLUs)
{
if (Prices.Any(x => x.pluId == mgmp.messagePLU.plu.pluId))
{
//do stuff
}
}
对于数据库中的特定产品,行
if (Prices.Any(x => x.pluId == mgmp.messagePLU.plu.pluId))
抛出System.NullReferenceException。检查代码可以发现mgmp 是对象,Prices包含元素。但是,x的值为空。现在,我的印象是,我只是在测试是否存在满足我的测试的"x",而不是要求它返回一个"x"。
这是一个很烦人的问题。希望有人能指出真正明显的解决方案。
尝试:
Prices.Any(x => x!=null && x.pluId == mgmp.messagePLU.plu.pluId)
您可能需要做其他空检查,例如,如果。messageplu可以为空
发生这种情况的最可能的原因是ViewBag.Prices
中的一个或多个项目是null
。检查x
为null
,或者看看为什么价格首先包含null
s,假设它不应该有任何null
值。
谢谢你的推理。检查List . any () any的扩展,即使List为空。
/// <summary>
/// Determines whether the collection is null or contains no elements.
/// </summary>
/// <typeparam name="T">The IEnumerable type.</typeparam>
/// <param name="enumerable">The enumerable, which may be null or empty.</param>
/// <returns>
/// <c>true</c> if the IEnumerable is null or empty; otherwise, <c>false</c>.
/// </returns>
public static bool IsNullOrEmpty<T>(this ICollection<T> enumerable)
{
return enumerable != null && enumerable.Count > 0;
}