Как вернуть массив структур в функции 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 шт):
Как я понял, у вас передозировка С++ и вы хотите вернуть указатель из метода, в 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;
// ваш код
}