2013-04-17 5 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 создается нормально (ну вроде, но об этом позже), метод IF_Export Retuns список в порядке, а затем, если я поставил точку останова цикл 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 конкретизации, что ошибки ..... .....

-------- Update 3 ---------------

Ok, я нашел в этот момент странные вещи происходят.

код находится внутри, если заявление

if (dsExportRecords != null && dsExportRecords.Tables[0].Rows.Count != 0) 

dsExportRecords является набор данных. Если я поместил свой код сразу в оператор if, тогда произойдут странные вещи, но если это произойдет непосредственно перед утверждением if, все будет в порядке.

+0

Можете ли вы выслать код IF_Export? – Elior

+0

Что такое 'recordListz' сразу после вызова' IF_Export'? это возможно «нуль»? Обратите внимание, что 'new List ()' никогда не будет использоваться, если только '------ другой несвязанный код -------' использует этот список где-то. –

+0

@Marc Gravell. recordListz заполняется 10 записями после вызова IF_Export. Как я уже сказал, если я сломаюсь в цикле for, он все еще заполняется и имеет счет 10, только когда цикл фактически выполняется, он как-то становится нулевым. – 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 действительно представлял собой пустой список, как только попытка catch поймала ошибку он затем сообщил об этом как о Null, который все еще озадачивает меня ..... Однако, поскольку мне никогда не нужен этот код для запуска, если в списке нет элементов, поместите оператор if вокруг цикла for, чтобы он позволял ему запускаться, только если WrittenRecords содержит элементы, похоже, решил проблему.

Я все еще не знаю, почему цикл вообще не удалось выполнить, почему код linq не удался с тем, что было просто пустым списком, почему пустой список внезапно превратился в нулевой список в catch или, действительно, почему ошибка брошенный linq, заявил, что он был нулевым или почему код linq полностью остановил записьListLista. Но по крайней мере мой код теперь работает.

Смежные вопросы