我使用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
正在使用其他参数(DateTime
和int
),我只是没有将它们包含在代码段中。
我已尝试ToList()
并成功收到List<T>
,但Telerik需要IEnumerable<T>
。
问题在于新参数,因为我之前已经能够使用其他参数(DateTime
和int
)成功创建报告。该问题仅在我尝试添加此新IEnumerable
参数时才开始。
我已经浏览了调试器并查看了IEnumerable,它说基数为null但是当我去非公开成员时 - &gt;来源我可以看到这些物品。
解决方案
我已经发现了问题,我试图将数据源作为参数提供。我把它设置为数据源,它完美地工作。
答案 0 :(得分:2)
在这一行中,不仅divisionList
可以是null
,事实上,在这种情况下,它会没事的。
divisionTotalsReport.ReportParameters["list"].Value = divisionList
由于NullReferenceException
例外通常仅在尝试取消引用对象时发生,候选者是:
divisionTotalsReport
divisionTotalsReport.ReportParameters
divisionTotalsReport.ReportParameters["list"]
如果您确认divisionTotalsReport
已设置且ReportParameters
正在返回有效参考,那么很可能它只是没有list
项。< / p>
您没有显示初始化DivisionReport
但是如果它是从报告文件加载的,您可能需要先添加list
参数才能设置它。