2013-04-17 79 views
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創建OK(良好的排序,但後來更多)環錯誤,IF_Export方法retuns名單確定,然後如果我把斷點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<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 
} 

「對象未設置爲一個對象

然而實例

-----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實例線路故障然後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

你可以發佈IF_Export的代碼嗎? – Elior

+0

在'IF_Export'調用之後緊接着'recordListz'是什麼?它可能是'空'嗎?請注意,'new List ()'不會被使用,除非'------其他不相關的代碼-------'在某處使用該列表。 –

+0

@Marc Gravell。在調用IF_Export之後,recordListz會填充10條記錄,正如我所說的,如果我在for循環中斷它仍然被填充並且計數爲10,那麼只有當循環實際執行時它纔會變爲null。 – coolblue2000

回答

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列表),但它確實會導致問題遍佈整個地方。

實際的問題是,WrittenRecords整數列表是作爲空列表返回的(不爲null,但沒有項目),雖然在進入循環之前,WrittenRecords在try catch發現錯誤後報告爲空列表然後它將它報告爲Null,這仍然讓我困惑......但是,如果列表中沒有任何項目,我不需要此代碼,那麼在for循環周圍放置if語句只允許它在WrittenRecords包含物品似乎已經解決了這個問題。

但是我仍然不知道爲什麼循環無法執行,linq代碼爲什麼只是一個空列表失敗,爲什麼空列表突然變成了一個空列表上的catch或者爲什麼錯誤由linq拋出聲明,它是null或爲什麼linq代碼阻止recordLista被實例化。但至少我的代碼現在可以工作。