2014-07-16 4 views
1

я получил следующий конструктор:Null ошибка исх C# несколько объектов

private PicklistHelper(string docId, string prodId, string user, string formProdId, string filepath,string parts) 
    { 
     this.documentId = docId; 
     this.prodId = prodId; 
     this.user = user; 
     this.filepath = filepath; 
     this.parts = parts; 
     this.formProdId = formProdId; 
     Log.Message("test parts = " + this.parts); 
    } 

СообщениеЖурнала действительно показывает значение для частей переменной. После этого я вызываю функцию.

private ArrayList GetPartDatasets() 
    { 
     Log.Message("test line 1"); 
     ArrayList picklist = new ArrayList(); 
     Log.Message("test line 2 " + parts); 
     string[] partIds = parts.Split(new[] { ';' }); 
     Log.Message("test line 3"); 

2-я тестовая линия отображается в журналах, но переменная частей пуста. после этого появляется ошибка null ref.

Объект PicklistHelper создается в функции, которая вызывается несколько раз подряд. Любая идея, что вызывает проблему?

+1

Является 'GetPartDatasets)' метод (в классе 'PicklistHelper'? –

+0

Возможный дубликат [Что такое исключение NullReferenceException и как его исправить?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) – user3613916

+0

@Andrew_CS Да, это –

ответ

0

Проблема в том, что parts - null.

В основном есть две возможные причины я могу пятно от кода вы предоставили с комментариями:

  1. Если то, что вы говорите, правда, и что точный PickListHelper конструктор вызывается по крайней мере один раз в любом возможном случае в вашей поток приложения, то все еще возможно, что все, что есть , вызываетPicklistHelpernull для параметра parts. Это можно проверить внутри конструктора чем-то вроде if (parts == null) throw new ArgumentNullException("parts");, так как вам нужен параметр parts. В противном случае вы должны выяснить, кто/что звонит PicklistHelper.
  2. Метод GetPartDatasets вызывается перед началом инициализации поля parts или после его сброса на null.
0

нулевые строки являются P.I.T.A. В нашем программном обеспечении мы не обрабатываем строки последовательно, чтобы мы вызывали методы в нулевых строках.

Попробуйте это

private PicklistHelper(string docId, string prodId, string user, string formProdId, string filepath,string parts) 
    { 
     this.documentId = docId?? string.Empty; 
     this.prodId  = prodId?? string.Empty; 
     this.user  = user??  string.Empty; 
     this.filepath = filepath?? string.Empty; 
     this.parts  = parts?? string.Empty; 
     this.formProdId = formProdId?? string.Empty; 

     Log.Message("test parts = " + this.parts); 
    } 
+1

Это не маскирует ошибки, когда пустой аргумент был принят по ошибке? Возможно, это лучше было бы спроектировать с различными перегрузками конструктора или даже с дополнительными параметрами. – Bas

+1

Цель состоит в том, чтобы исключить ненужные ссылочные исключения. Более подробная проверка параметров может быть в порядке. – radarbob

+1

Но исключение NullReferenceException намного лучше, чем отсутствие ошибки вообще, когда она должна быть такой. – Bas

0

части строки;

if (parts != null) 
     { 
      string[] partIds = parts.Split(new[] { ';' }); 
      Log.Message("test line 3" + partIds); 
     } 

Звучит неплохо. :)

С уважением, Sekhar