IEnumerable具有值,但仍然提供System.NullReferenceException

时间:2013-05-13 15:05:26

标签: c# linq ienumerable telerik-reporting

我使用LINQ查询填充IEnumerable。然后将IEnumerable传递到另一个类并作为参数附加(到Telerik报告)。在这一行,我得到一个System.NullReferenceException。通过调试我已经确认这个IEnumerable有一个值列表,所以我不确定为什么会发生这种情况。

以下是我的代码的一些相关摘要:

Class1.cs

//Note that divisionList is an List of PKs and divisionTotalsList is a list of DivisionTotalsModel
foreach (int division in divisionList)
            {

                //LINQ Query
                IEnumerable<DivisionTotalsModel> divSubset =
                    from divno in divisionTotalsList
                    where divno.DivisionNo == division
                    select divno;


                //Create Report
                if(divSubset.Any())
                    Class2.DoStuff(divSubset);
            }

Class2.cs

public void DoStuff(IEnumerable<DivisionTotalsModel> divisionList){
     using (var divisionTotalsReport = new DivisionReport())
        {
          //There are other parameters here that are working successfully
          //This is the line that is failing
          divisionTotalsReport.ReportParameters["list"].Value = divisionList;
        }
}

为什么这里会发生错误?

ReportParameters正在使用其他参数(DateTimeint),我只是没有将它们包含在代码段中。

我已尝试ToList()并成功收到List<T>,但Telerik需要IEnumerable<T>

问题在于新参数,因为我之前已经能够使用其他参数(DateTimeint)成功创建报告。该问题仅在我尝试添加此新IEnumerable参数时才开始。

我已经浏览了调试器并查看了IEnumerable,它说基数为null但是当我去非公开成员时 - &gt;来源我可以看到这些物品。

解决方案

我已经发现了问题,我试图将数据源作为参数提供。我把它设置为数据源,它完美地工作。

1 个答案:

答案 0 :(得分:2)

在这一行中,不仅divisionList可以是null,事实上,在这种情况下,它会没事的。

divisionTotalsReport.ReportParameters["list"].Value = divisionList

由于NullReferenceException例外通常仅在尝试取消引用对象时发生,候选者是:

  1. divisionTotalsReport
  2. divisionTotalsReport.ReportParameters
  3. divisionTotalsReport.ReportParameters["list"]
  4. 如果您确认divisionTotalsReport已设置且ReportParameters正在返回有效参考,那么很可能它只是没有list项。< / p>

    您没有显示初始化DivisionReport但是如果它是从报告文件加载的,您可能需要先添加list参数才能设置它。