考虑以下部分视图代码段
List<sellingPrice> Prices = ViewBag.Prices;
foreach (var mgmp in mg.messageGroup.messageGroupMessagePLUs)
{
if (Prices.Any(x => x.pluId == mgmp.messagePLU.plu.pluId))
{
//do stuff
}
}
对于db中的特定产品,行
if (Prices.Any(x => x.pluId == mgmp.messagePLU.plu.pluId))
抛出System.NullReferenceException。检查代码显示mgmp 是 一个对象,而价格包含元素。但是,x的值为null。现在,我的印象是我只是测试是否存在满足我的测试的任何“x”,而不是要求它返回“x”。
这是一个非常恼人的问题。希望有人可以指出真正明显的解决方案。
答案 0 :(得分:5)
尝试:
Prices.Any(x => x!=null && x.pluId == mgmp.messagePLU.plu.pluId)
如果例如.messagePLU可以为null
,则可能需要执行其他空检查答案 1 :(得分:2)
发生这种情况的最可能原因是ViewBag.Prices
中的一个或多个项目是null
。检查x
的{{1}},或者首先查看价格包含null
的原因,假设它不应该包含任何null
值。
答案 2 :(得分:0)
感谢大家的推理。 即使List为null,也检查list.Any()的扩展名。
/// <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;
}