C# Generic List.Any() throws System.NullReferenceException

Captain Kenpachi picture Captain Kenpachi · Jan 16, 2013 · Viewed 8.2k times · Source

Consider the following partial view code snippet

List<sellingPrice> Prices = ViewBag.Prices;
foreach (var mgmp in mg.messageGroup.messageGroupMessagePLUs)
{
    if (Prices.Any(x => x.pluId == mgmp.messagePLU.plu.pluId))
    {
        //do stuff
    }
}

For specific products in the db, the line

if (Prices.Any(x => x.pluId == mgmp.messagePLU.plu.pluId))

throws a System.NullReferenceException. Inspecting the code shows that mgmp is an object and Prices contains elements. However, the value of x is null. Now, I am under the impression that I am simply testing whether or not any "x" exists that satisfies my test, not asking it to return an "x".

It's a very irritating problem. Hopefully someone can point out the really obvious solution.

Answer

Johan Larsson picture Johan Larsson · Jan 16, 2013

Try:

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

You might need to do other null checks if for example .messagePLU can be null