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

#c# #arrays #class #methods #constructor

#c# #массивы #класс #методы #конструктор

Вопрос:

Я хотел бы получить объяснение, что я делаю неправильно. Я вставляю два блока кодов; один работает, другой не работает. Первый код работает, потому что начальные значения передаются в метод «MyGreatMethod», я их вижу:

  public class Something
    {
        private int [] MyArray = new int [3];

        public Something()
        {
            MyArray[0] = 100;
            MyArray[1] = 200;
            MyArray[2] = 300;
        }

        public void MyGreatMethod()
        {
            Console.WriteLine(MyArray[0] / 3);
            Console.WriteLine(MyArray[1] / 3);
            Console.WriteLine(MyArray[2] / 3);
        }

    }
  

но если я помещаю значения в «myArray» таким образом (см. Ниже), метод «MyGreatMethod» получает нули из конструктора, что я делаю не так? Пожалуйста, помогите..

 public class Something
    {
        private int [] MyArray = new int [3];

        public Something()
        {
            int[] MyArray = {100,200,300};
        }

        public void MyGreatMethod()
        {
            Console.WriteLine(MyArray[0] / 3);
            Console.WriteLine(MyArray[1] / 3);
            Console.WriteLine(MyArray[2] / 3);
        }

    }
  

Комментарии:

1. Это локальная переменная. Попробуйте удалить int[]

2. Это потому, что во 2-м фрагменте вы инициализируете локальную переменную с именем MyArray вместо поля экземпляра с именем MyArray

Ответ №1:

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

Вы должны удалить int[] из конструктора:

 public class Something
{
    private int [] MyArray = new int [3];

    public Something()
    {
        MyArray = {100,200,300};
    }

    public void MyGreatMethod()
    {
        Console.WriteLine(MyArray[0] / 3);
        Console.WriteLine(MyArray[1] / 3);
        Console.WriteLine(MyArray[2] / 3);
    }
}
  

Ответ №2:

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

 public class Something
{
    private int[] MyArray;

    public Something()
    {
        MyArray = new int[3] { 100, 200, 300 };
    }

    public void MyGreatMethod()
    {
        Console.WriteLine(MyArray[0] / 3);
        Console.WriteLine(MyArray[1] / 3);
        Console.WriteLine(MyArray[2] / 3);
    }

}
  

Комментарии:

1. Спасибо! Это было так! Теперь это работает! Может спросить, когда следует использовать «это»