对象引用未设置为对象的实例.然而,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 引用异常。我不明白为什么会这样

对象引用未设置为对象的实例.然而,Foreach 循环正在工作

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"。 其余的都是空的。一旦我将虚拟值放入其余行中,它就开始完美地工作。不知道为什么会发生这种情况,但至少让我的代码工作