5

考虑以下部分视图代码片段

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一个对象,价格包含元素。但是,x 的值为空。现在,我的印象是我只是在测试是否存在任何满足我测试的“x”,而不是要求它返回“x”。

这是一个非常恼人的问题。希望有人能指出真正明显的解决方案。

4

3 回答 3

7

尝试:

Prices.Any(x => x!=null && x.pluId == mgmp.messagePLU.plu.pluId)

如果例如 .messagePLU 可以为空,您可能需要进行其他空检查

于 2013-01-16T15:17:01.310 回答
2

发生这种情况的最可能原因是因为 is 中的一个或多个ViewBag.Prices项目null。检查xnull或者看看为什么价格null首先包含 s,假设它不应该有任何null值。

于 2013-01-16T15:18:13.140 回答
0

谢谢大家的推理。即使 List 为空,也可以检查 list.Any() 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;
    }
于 2015-09-30T03:56:42.890 回答