Как вернуть массив структур в функции int?

В начале у меня есть структура Airplane. мне нужно (вне структуры) объявить массив и написать функцию, которая читает с клавиатуры массив структур (n штук) и возвращает массив структур типа Airplane и вызвать эту функцию в void menu(). Компилятор на меня матюкается..

class Program
{
    Airplane[] arr;
    static void menu()
    {
        int q;
        WriteLine("Что вы хотите сделать?? ");
        do {
            q = int.Parse(ReadLine());
            switch (q)
            {
                case 1:
                    {
                        
                        //arr = vvod(arr);
                        break;
                    }
                case 2:
                    {
                        arr = ReadAirplaneArray(arr);//тут компилятор пишет ошибку (пишет "Требуется ссылка на объект")
                        break;
                    }
            }



        } while (q != 0);
        

    }
    static int ReadAirplaneArray(Airplane [] arr)
    {
        int n;
        WriteLine("Сколько рейсов вы хотите ввести? ");
        n = int.Parse(ReadLine());
        arr = new Airplane[n];

        return arr;// и ещё вот тут вот тоже подчёркивает красным
    }

  
}

Ответы (1 шт):

Автор решения: aepot

Как я понял, у вас передозировка С++ и вы хотите вернуть указатель из метода, в C# это так не работает, а работает вот как:

Чтобы создать массив и присвоить его значение вне метода, из метода, то можно передавать его по ссылке ref

static void ReadAirplaneArraySize(ref Airplane[] arr)
{
    WriteLine("Сколько рейсов вы хотите ввести? ");
    int n = int.Parse(ReadLine());
    arr = new Airplane[n];
}

Ну и вот так использовать

ReadAirplaneArraySize(ref arr);

И так как методы ваши статичны, нужно либо их сделать нестатичными, либо массив сделать статичным.

static Airplane[] arr;

Или даже лучше, так как у вас уже массив передается как аргумент, можно его объявить внутри метода, а не в статичном поле

static void menu()
{
    Airplane[] arr = null;
    // ваш код
}
→ Ссылка