Нулевая ссылка ошибка C # несколько объектов

1

Я получил следующий конструктор:

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

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

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");

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

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

  • 1
    Является GetPartDatasets() метод в PicklistHelper классе?
Показать ещё 6 комментариев
Теги:
oop
variables
nullreferenceexception

3 ответа

0
Лучший ответ

Проблема в том, что parts являются нулевыми.

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

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

струнные части;

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

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

привет, Сехар

0

нулевые строки - это PITA. В нашем программном обеспечении мы не обрабатываем строки последовательно, чтобы мы вызывали методы для нулевых строк.

Попробуй это

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
    Разве это не маскирует ошибки, когда нулевой аргумент был передан по ошибке? Возможно, это было бы лучше спроектировано с другими перегрузками конструктора или даже с дополнительными параметрами.
  • 1
    Дело в том, чтобы предотвратить исключение нулевой ссылки. Больше проверки параметров может быть в порядке.
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню