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
正在处理其他参数(DateTime
和int
),我只是没有将它们包含在代码片段中。
我试过ToList()
,并成功收到了List<T>
,但Telerik需要IEnumerable<T>
。
问题在于新参数,因为我以前已经能够使用其他参数(DateTime
和int
)成功创建报告。当我尝试添加这个新的IEnumerable
参数时,这个问题才开始出现。
我已经通过调试器并查看了IEnumerable,它说基数是空的,但当我转到非公共成员->源时,我可以看到项目。
<<p> 解决方案/strong>我已经找到了问题所在,我试图将数据源作为参数提供。我把它设置为数据源,它工作得很好。
在这一行,不只是divisionList
可以是null
,事实上,在这种情况下,它会很好。
divisionTotalsReport.ReportParameters["list"].Value = divisionList
由于NullReferenceException
异常通常只在尝试解引用对象时发生,因此候选对象是:
-
divisionTotalsReport
-
divisionTotalsReport.ReportParameters
-
divisionTotalsReport.ReportParameters["list"]
如果你已经确认divisionTotalsReport
是设置的,并且ReportParameters
返回一个有效的引用,那么很可能它只是没有list
项。
您没有显示初始化DivisionReport
的内容,但如果它是从报告文件加载的,您可能需要在设置它之前添加list
参数。