IEnumerable有值,但仍然给出System.NullReferenceException

本文关键字:System NullReferenceException 有值 IEnumerable | 更新日期: 2023-09-27 18:13:15

我正在使用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,它说基数是空的,但当我转到非公共成员->源时,我可以看到项目。

<<p> 解决方案/strong>

我已经找到了问题所在,我试图将数据源作为参数提供。我把它设置为数据源,它工作得很好。

IEnumerable有值,但仍然给出System.NullReferenceException

在这一行,不只是divisionList可以是null,事实上,在这种情况下,它会很好。

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

由于NullReferenceException异常通常只在尝试解引用对象时发生,因此候选对象是:

  1. divisionTotalsReport
  2. divisionTotalsReport.ReportParameters
  3. divisionTotalsReport.ReportParameters["list"]

如果你已经确认divisionTotalsReport是设置的,并且ReportParameters返回一个有效的引用,那么很可能它只是没有list项。

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