我有以下代码
List<WorkingRecord> recordListz = new List<WorkingRecord>();
-----other unrelated code----------
recordListz = IF_Export(out ifRecCount,out WrittenRecords);
for (int i = 0; i < recordListz.Count; i++)
{
//do something
}
recordListz创建好了(稍后会更多),IF_Export方法返回列表ok然后如果我将断点放在for循环上并将鼠标悬停在recordListz对象上它看起来很好(有10条记录)它)和计数也报告10条记录。但是,当我尝试执行循环时,代码错误声称“对象未设置为对象的实例”(列表中的对象的非空)。此外,如果我此时快速监视对象,它声称值为[''为空]。
现在讨论创建recordListz对象的问题....实际上,在recordListz的实例化和方法调用之间存在一些其他代码(与上面的代码完全无关)。最初我有以下代码
List<WorkingRecord> recordListz = IF_Export(out ifRecCount,out WrittenRecords);
然而,这导致了“对象未设置为对象实例”的错误,即使被调用的方法返回了一个完美的列表(通过在方法的返回行上放置断点来确认)。
然后我把它分解为以下
List<WorkingRecord> recordListz = new List<WorkingRecord>();
recordListz = IF_Export(out ifRecCount,out WrittenRecords);
然而,这在第一行上出现错误,“对象未设置为对象的实例”。我有完全相同的行在IF_Export方法中调用,该方法工作正常并且与调用它的代码在同一个类中...
将行移到代码的顶部会使错误停止,但这会导致循环错误。
到底发生了什么,我以前从未见过这个。
----------------------- UPDATE -------------------
好的,如果我有以下代码
-----other unrelated code----------
List<int> WrittenRecords=new List<int>();
List<WorkingRecord> recordListz = new List<WorkingRecord>();
recordListz = IF_Export(out ifRecCount,out WrittenRecords);
for (int i = 0; i < recordListz.Count; i++)
{
//do something
}
recordListz实例化行错误,“对象未设置为对象的实例
但是如果我有以下代码
-----other unrelated code----------
List<WorkingRecord> recordLista = new List<WorkingRecord>();
List<int> WrittenRecords=new List<int>();
List<WorkingRecord> recordListz = new List<WorkingRecord>();
recordListz = IF_Export(out ifRecCount,out WrittenRecords);
for (int i = 0; i < recordListz.Count; i++)
{
//do something
}
然后recordListz实例化仍然出错,但是recordLista实例化工作正常!
如果我有以下代码
-----other unrelated code----------
List<int> WrittenRecords=new List<int>();
List<WorkingRecord> recordLista = new List<WorkingRecord>();
List<WorkingRecord> recordListz = new List<WorkingRecord>();
recordListz = IF_Export(out ifRecCount,out WrittenRecords);
for (int i = 0; i < recordListz.Count; i++)
{
//do something
}
recordLista也可以正常使用!
--------另一次更新------
如果我输入以下代码
-----other unrelated code----------
List<int> WrittenRecords=new List<int>();
List<WorkingRecord> recordLista = new List<WorkingRecord>();
List<WorkingRecord> recordListz = new List<WorkingRecord>();
recordLista = IF_Export(out ifRecCount,out WrittenRecords);
for (int i = 0; i < recordLista.Count; i++)
{
//do something
}
现在是recordLista实例化错误..........
--------更新3 ---------------
好的,我发现奇怪的事情发生在哪一点。
代码位于if语句
中if (dsExportRecords != null && dsExportRecords.Tables[0].Rows.Count != 0)
dsExportRecords是一个数据集。如果我把我的代码立即放在if语句中,那么奇怪的事情会发生,但是如果它紧接在if语句之前那么一切都很好。
答案 0 :(得分:0)
我有点发现了这个问题(我的代码现在无论如何都适用)
这个问题原来是一些Linq代码。
失败的循环如下
for (int i = 0; i < recordLista.Count; i++)
{
int id = (from r in WrittenRecords where r == recordLista[i].RequestID select r).FirstOrDefault();
if (id != 0)
{
//do something
}
}
WrittenRecords是List<int>
灵线从来没有受到影响(因为循环失败后循环失败),所以这看起来不像问题。然而确实是问题。不知道为什么这一行也停止了远远高于它的代码(即实例化recordLista List),但确实在整个地方引起了问题。
实际问题是WrittenRecords整数列表作为空列表返回(不是null,但没有项目),虽然在进入循环之前,一旦try catch捕获到错误,WrittenRecords就会报告为空列表然后把它报告为Null,这仍然让我感到困惑.....然而,如果列表中没有项目我就不需要运行此代码,在for循环周围放置一个if语句,只允许它在WrittenRecords包含时运行项目似乎已经解决了这个问题。
然而,我仍然不知道为什么循环根本无法执行,为什么linq代码失败了什么只是一个空列表,为什么空列表突然变成了捕获的空列表或者为什么错误抛出由linq声明它是null或为什么linq代码阻止recordLista完全被实例化。但至少我的代码现在有效。