0

Вопрос такой, есть у меня массив из объектов класса, например, MyClass:

MyClass[] arr = new MyClass[5];

И вот есть в этом классе метод Info. И мне нужно обратиться к нему через какой-нибудь элемент массива так:

arr[0].Info();

Но компилятор выдаёт ошибку "Ссылка на объект не указывает на экземпляр объекта". И как мне быть? Подскажите, какие варианты обхода этой ошибки есть. Мне нужен именно массив объектов.

  • arr[0] = new MyClass(); arr[0].Info(); – tym32167 May 25 '19 at 13:02
  • А точно, спасибо большое. – Арсений Кривецкий May 25 '19 at 13:05
  • создать массив - это как купить гостиницу без жильцов. Место есть, а жильцов нет. Чтобы они там появились, надо их туда поселить. Вот я в примере выше в комнату номер 0 поселил экземпляр класса MyClass, а потом уже обратился к нему по номеру комнаты и вызвал метод Info() – tym32167 May 25 '19 at 13:05
  • Ещё одна проблемка есть. В классе у меня есть свойство, в виде массива:

    public double[] weights { get; set; };

    И когда я обращаюсь к нему вот так:

    arr[0].weights[0] = 3.4;

    Выкидывает ту же самую ошибку.

    – Арсений Кривецкий May 25 '19 at 13:22
  • public double[] weights { get; set; } = new double[/*нужное вам количество*/]; – tym32167 May 25 '19 at 13:24
  • Компилятор ругается на знак "=" (Недопустимый токен '=' в объявлении члена класса, структуры или интерфейса), и на размер массива (Невозможно указать размер массива в объявлении переменной (попробуйте выполнить инициализацию с помощью «нового» выражения)).

    Всё понятно написано, но понять не могу.

    – Арсений Кривецкий May 25 '19 at 13:31

1 Answers1

1

Проьблема с созданием массива рещается так

arr[0] = new MyClass(); 
arr[0].Info();

создать массив - это как купить гостиницу без жильцов. Место есть, а жильцов нет. Чтобы они там появились, надо их туда поселить. Вот я в примере выше в комнату номер 0 поселил экземпляр класса MyClass, а потом уже обратился к нему по номеру комнаты и вызвал метод Info()

Проблема с инициализацией поля так

public class MyClass
{
    public double[] weights { get; set; } = new double[10];
}

Или так

public class MyClass
{
    public double[] weights { get; set;}
    public MyClass()
    {
        weights = new double[10];
    }
}

Где вместо 10 указываете нужное вам количество.

tym32167
  • 32,857