2015-12-04 3 views
0

У меня есть параметризованный конструктор и конструктор по умолчанию. Они оба создают новый массив объектов с длиной x, однако, когда я пытаюсь получить доступ к массиву в методе Add, он возвращает значение «null». Я не могу инициализировать массив в полях, потому что я не знаю, какой размер пользователь хочет, но я не знаю, как получить доступ к «обновленному» массиву позже в коде. Я получаю NullReferenceException() в строке кода: if (count> data.Length), потому что данные имеют значение null.Доступ к обновленному массиву из конструктора

class CustomList 
{ 
    private int count; 
    private String[] data; 

    public int Count 
    { 
     get { return count; } 
    } 
    public CustomList(int arrayNum) 
    { 
     String[] data = new String[arrayNum]; 
    } 
    public CustomList(): this(4) 
    { 
    } 

    public void Add (String item) 
    { 
     if (count > data.Length) 
     { 
      String[] temp = new String[count * 2]; 
      for (int i = 0; i < data.Length; i++) 
      { 
       temp[i] = data[i]; 
      } 
      data = temp; 
     } 
     data[count] = item; 
     count++; 
    } 

ответ

4

Изменить это:

public CustomList(int arrayNum) 
{ 
    String[] data = new String[arrayNum]; 
} 

Для этого:

public CustomList(int arrayNum) 
{ 
    data = new String[arrayNum]; 
} 

Вы случайно создали локальную переменную в конструкторе, который в настоящее время назначен вместо поля, которые вы хотели назначить в.

2

Изменить код.

Ваш объект данных в конструкторе является локальной переменной. И вы не инициализируете свой объект данных экземпляра.

class CustomList 
{ 
private int count; 
private String[] data; 

public int Count 
{ 
    get { return count; } 
} 
public CustomList(int arrayNum) 
{ 
    data = new String[arrayNum]; 
} 
public CustomList(): this(4) 
{ 
} 

public void Add (String item) 
{ 
    if (count > data.Length) 
    { 
     String[] temp = new String[count * 2]; 
     for (int i = 0; i < data.Length; i++) 
     { 
      temp[i] = data[i]; 
     } 
     data = temp; 
    } 
    data[count] = item; 
    count++; 
} 
Смежные вопросы