c#泛型List.Any()抛出System.NullReferenceException



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

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。检查xnull,或者看看为什么价格首先包含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;
    }

相关内容

  • 没有找到相关文章

最新更新