0

我有以下代码

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 方法重新调整列表,然后如果我将断点放在 for 循环上并将鼠标悬停在 recordListz 对象上,它看起来很好(其中有 10 条记录)和计数也报告 10 条记录。但是,一旦我尝试执行循环,代码错误就会声称“对象未设置为对象的实例”(列表中的对象都不是空的)。另外,如果我此时快速观察对象,它声称该值为 ['' 为 null]。

现在谈谈首先创建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 方法中调用它工作正常并且与调用它的代码在同一个类中......

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

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

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

好的,如果我有以下代码

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

4

1 回答 1

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
    }
}

书面记录是一个List<int>

ling 线从未被击中(因为一旦我进入循环就失败了),所以这看起来从来都不是问题。然而,这确实是问题所在。不知道为什么这条线也阻止了它上面的代码也无法工作(即实例化recordLista List),但它确实导致了整个地方的问题。

实际问题是 WrittenRecords 整数列表作为空列表返回(不是 null,但没有项目),尽管在进入循环之前,WrittenRecords 确实报告为空列表,一旦 try catch 捕获到错误,然后报告它作为 Null 仍然让我感到困惑.....但是,如果列表中没有项目,我永远不需要运行此代码,因此在 for 循环周围放置一个 if 语句,仅当 WrittenRecords 包含项目时才允许它运行已经解决了这个问题。

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

于 2013-04-18T10:04:12.780 回答