值不能为空。错误

时间:2015-07-27 12:21:08

标签: c# wpf linq

我在下面的方法中遇到错误,我尝试将数据从combobox添加到datagrid然后在我添加数据后我想要计算&#的总量39; ItemSellingPrice'并在标签中显示该金额。

using (TruckServiceClient TSC = new TruckServiceClient())
{
    var item = cmbAddExtras.SelectedItem as ExtraDisplayItems;

    if (item != null)
    {
        var displayItem = new List<ExtraDisplayItems>
        {
            new ExtraDisplayItems 
            { 
                displayItems = item.displayItems,
                ItemId = item.ItemId, 
                ItemCode = item.ItemCode, 
                ItemDescription = item.ItemDescription, 
                ItemSellingPrice = item.ItemSellingPrice,
            }
        };
        dgAddExtras.Items.Add(item);
        var subTotalExtras = item.displayItems.Sum(x => x.ItemSellingPrice.GetValueOrDefault(0)); //Here
        lblSubTotalExtrasAmount.Content = "R" + subTotalExtras;
    }
}

我得到的错误是:

  

值不能为空。

有没有人知道为什么会这样?

编辑:这是我在班级中设置displayItems的地方

public class ExtraDisplayItems
{
    public List<ExtraDisplayItems> displayItems;

    public int ItemId { get; set; }    
    public string ItemCode { get; set; }    
    public string ItemDescription { get; set; }    
    public double? ItemSellingPrice { get; set; }
}

1 个答案:

答案 0 :(得分:3)

感谢Gert Arnold,实际问题是item.displayItemsnull(因此不在lambda中,因为它完全正常)。

一些证据。这会收到您确切的错误消息:

double?[] x = null;
double? sum = x.Sum(y => y);

(你没有获得NullReferenceException的原因是你实际上调用的是静态方法(扩展方法),所以从技术上讲,引用不是null,而是参数是。)

您应该检查您设置item.displayItems的位置,或阻止在值Sum的{​​{1}}上拨打item.displayItems