调用时的For循环错误

本文关键字:循环 错误 For 调用 | 更新日期: 2023-09-27 18:09:42

我有以下代码

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被创建ok(好吧,但更多的是稍后),IF_Export方法返回列表ok,然后如果我把断点放在for循环上,并悬停在recordListz对象上,它看起来很好(其中有10条记录),计数也报告10条记录。然而,一旦我尝试执行循环代码错误声称"对象不设置为对象的实例"(列表中的非对象为空)。另外,如果我在这个点上快速观察这个对象,它声称值是[" is null]。

现在首先讨论创建recordListz对象的问题....实际上,在recordListz的实例化和方法调用之间还有一些其他代码(与上面的代码完全无关)。最初我有以下代码

List<WorkingRecord> recordListz = IF_Export(out ifRecCount,out WrittenRecords);

然而,这导致了一个错误"Object not set to a instance of a Object ",即使被调用的方法返回了一个完美的列表(通过在方法的返回行上放置一个断点来确认)。

然后我把它分解成下面的

List<WorkingRecord> recordListz = new List<WorkingRecord>();
recordListz = IF_Export(out ifRecCount,out WrittenRecords);

然而,第一行"Object not set to an instance of an Object"出错了。我有完全相同的行,这是在IF_Export方法中调用的,它工作得很好,与调用它的代码在同一个类中…

将这行移到代码的顶部可以防止出错,但这会导致循环错误。

这到底是怎么回事,我以前从来没见过。

----------------------- 更新 -------------------

好的,如果我有以下代码

-----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实例化行错误:"object not set to instance of an object

但是如果我有下面的代码

-----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语句之前,那么一切都很好。

调用时的For循环错误

我已经找到了问题(好吧,我的代码现在工作)

问题原来是一些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>

ling行从未被击中(因为我一进入循环就失败了),所以这看起来不像是问题所在。然而,这确实是一个问题。不知道为什么这一行也停止了代码远远高于它的工作太(即实例化recordLista列表),但它确实导致问题无处不在。

实际的问题是,WrittenRecords整数列表返回作为一个空列表(不是空,但没有项目),虽然在进入循环WrittenRecords报告是一个空列表一旦尝试捕获了错误,然后报告它为空,这仍然是困惑我.....然而,由于我从不需要这段代码运行,如果列表中没有项目,在for循环周围放一个if语句,只允许它运行,如果WrittenRecords包含项目似乎已经解决了这个问题。

然而,我仍然不知道为什么循环根本执行失败,为什么linq代码失败了,什么只是一个空列表,为什么空列表突然变成一个空列表,或者确实为什么linq抛出的错误声明它是空的,或者为什么linq代码停止了recordLista被实例化。但至少我的代码现在可以工作了