我正在填充 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
正在使用其他参数( DateTime
和 int
),我只是没有将它们包含在代码片段中。
我已经尝试过ToList()
并成功收到List<T>
,但 Telerik 需要 IEnumerable<T>
.
问题必须出在新参数上,因为我之前已经能够使用其他参数( DateTime
和 int
)成功创建报告。当我尝试添加这个新的IEnumerable
时,问题才开始出现。参数。
我已经通过调试器并查看了 IEnumerable,它说基数为空,但是当我转到非公共(public)成员 -> 源时,我可以看到这些项目。
解决方案
我已经解决了问题,我试图将数据源作为参数提供。我已将其设置为数据源,并且运行良好。
最佳答案
在这一行中,不仅仅是 divisionList
可以为 null
,事实上,在本例中,这样就可以了。
divisionTotalsReport.ReportParameters["list"].Value = divisionList
由于 NullReferenceException
异常通常仅在尝试取消引用对象时发生,因此候选者是:
divisionTotalsReport
divisionTotalsReport.ReportParameters
divisionTotalsReport.ReportParameters["list"]
如果您确认已设置 divisionTotalsReport
并且 ReportParameters
返回有效引用,那么很可能它没有 列出
项目。
您没有显示 DivisionReport
的初始化内容,但如果它是从报告文件加载的,则可能需要添加 list
参数才能设置它。
关于c# - IEnumerable 有值但仍然给出 System.NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16525293/