对象引用未设置为对象的实例.然而,Foreach 循环正在工作
本文关键字:Foreach 循环 工作 然而 实例 设置 对象 对象引用 | 更新日期: 2023-09-27 18:34:53
所以我有一个奇怪的问题。 当我对数据表进行 LINQ 查询时,我得到
"对象引用未设置为对象的实例。">
但是当对结果使用 forloop 时,它可以正常工作.dt 是一个数据表
var productdata = from data in dt.AsEnumerable()
where data.Field<string>("Edited").ToString().ToUpper() == "NEW"
select data;//I get the object reference error here
foreach (var item in productdata) //but here the control goes inside the foreachloop even though the object refrence was null and the code gets executed correctly
{
//operation
}
只有在最后一次迭代之后,它才会再次给出 null 引用异常。我不明白为什么会这样
productdata
中的项是懒惰生成的,异常可能发生在 Where
子句中:
where data.Field<string>("Edited").ToString().ToUpper() == "NEW"
productdata
序列不为 null,因此 foreach 可以开始执行,但在调用 MoveNext
并且访问 Edited
字段并发现为 null 之前,不会引发异常。
按如下所示更新 linq 查询:
var productdata = (from data in dt
where data.Field<string>("Edited").ToString().ToUpper() == "NEW"
select data)
.ToList();//I get the object reference error here
这将立即返回结果集,并验证 foreach 循环。
为什么在这里使用 linQ您可以在其中简单地使用
var productdata = dt.Select("Edited='NEW'");
我找到了答案。 您会看到我是通过读取 Excel 文件来创建此数据表的。 并且在文件中,只有一行在编辑的列中有"NEW"。 其余的都是空的。一旦我将虚拟值放入其余行中,它就开始完美地工作。不知道为什么会发生这种情况,但至少让我的代码工作