【问题标题】:IEnumerable has values but still gives System.NullReferenceExceptionIEnumerable 有值但仍然给出 System.NullReferenceException
【发布时间】:2013-05-13 15:05:25
【问题描述】:

我正在使用 LINQ 查询填充 IEnumerableIEnumerable 然后被传递到另一个类并作为参数附加(到 Telerik 报告)。在这条线上,我收到了System.NullReferenceException。通过调试,我已经确认这个IEnumerable 有一个值列表,所以我不确定为什么会这样。

以下是我的代码的一些相关 sn-ps:

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),我只是没有将它们包含在代码 sn-p 中。

我已尝试ToList() 并成功收到List&lt;T&gt;,但 Telerik 需要IEnumerable&lt;T&gt;

问题出在新参数上,因为我之前使用其他参数(DateTimeint)能够成功创建报告。当我尝试添加这个新的IEnumerable 参数时,问题才开始出现。

我已经通过调试器查看了 IEnumerable,它说基数为空,但是当我转到非公共成员时 -> 源代码我可以看到这些项目。

解决方案

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

【问题讨论】:

  • 也许你可以添加一段初始化ReportParameters的代码?
  • 调试代码并查看该代码行上的实际null 是什么。可能不是divisionList。很可能ReportParametersnull 或者(很可能)无论它的索引器返回什么都是null
  • 你试过在linq中使用.ToArray吗?
  • 您是否检查过divisionTotalsReportdivisionTotalsReport.ReportParametersdivisionTotalsReport.ReportParameters["list"] 都是有效的实例化对象?
  • @Deanna 是的,我已经能够成功地使用其他参数创建报告。因此问题必须出在新参数上。

标签: c# linq ienumerable telerik-reporting


【解决方案1】:

在这一行,不只是divisionList可以是null,其实这种情况下就可以了。

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

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

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

如果您已确认已设置 divisionTotalsReport 并且 ReportParameters 正在返回有效引用,那么它很可能只是没有 list 项。

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

【讨论】:

    猜你喜欢
    • 2013-08-09
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 2016-09-19
    • 2011-04-11
    相关资源
    最近更新 更多