Nullable access in lambda warns about System.InvalidOperationException

For a webshop, suppose you have a List<ActionCode>, where ActionCode has a Nullable<decimal> DiscountAmount property.
The following piece of LINQ works correctly:

      decimal actionCodesDiscount =
        actionCodes.Where(actionCode => actionCode != null && actionCode.DiscountAmount.HasValue)
                   .Sum(actionCode => actionCode.DiscountAmount.Value);

However, Resharper warns that the second lambda .Sum(actionCode => actionCode.DiscountAmount.Value) possibly throws System.InvalidOperationException.
This is caused by ReSharper checking access to the Nullable<decimal>.Value to see if the code checks for HasValue.

I'm checking for HasValue though, but since I'm using the Linq Where, which is a different lambda, Resharper doesn't know that I'm checking for it.

This might be a known issue, but maybe this could be resolved by some additional checking...

Note: if I convert this to a foreach with Resharper quicktool this warning isn't present:

      decimal actionCodesDiscount = 0;
      foreach (IActionCode actionCode in actionCodes)
        if (actionCode != null && actionCode.DiscountAmount.HasValue)
          actionCodesDiscount += actionCode.DiscountAmount.Value;

Please sign in to leave a comment.