c# - IEnumerable 有值但仍然给出 System.NullReferenceException

标签 c# linq ienumerable telerik-reporting

我正在填充 IEnumerable使用 LINQ 查询。 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,它说基数为空,但是当我转到非公共(public)成员 -> 源时,我可以看到这些项目。

解决方案

我已经解决了问题,我试图将数据源作为参数提供。我已将其设置为数据源,并且运行良好。

最佳答案

在这一行中,不仅仅是 divisionList 可以为 null,事实上,在本例中,这样就可以了。

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

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

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

如果您确认已设置 divisionTotalsReport 并且 ReportParameters 返回有效引用,那么很可能它没有 列出项目。

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

关于c# - IEnumerable 有值但仍然给出 System.NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16525293/

相关文章:

c# - Enumerable.Range - 什么时候使用它有意义?

C# 自定义字典获取 - 从 IEnumerable 转换回来

c# - 在 C# 中执行 ParseInt 时输入字符串的格式不正确

asp.net - Xdocument.Load(XMLReader.Read()) 给我错误

c# - 基于 Microsoft Word 模板生成 PDF 文档

c# - 如何在 .NET Core 3.0 Entity Framework 中执行组加入?

c# - 将多个字符串拆分为 C# 中的对象列表

c# - 为什么 .NET 中有这么多命名集合没有实现 IEnumerable<T>?

c# - 为什么这个通用方法不会调用编译?

c# - 如何根据参数更改 wcf 响应类型?