C # проблема с массивом объектов - PullRequest
0 голосов
/ 04 сентября 2011

Я довольно плохо знаком с массивами в C # и привык хранить массу данных в строке и в файлах INI, а затем разбивать их на базовые массивы с помощью разделителей ... так что, да, моих знаний почти не существует.

Мой основной класс формы начинает это определение:

public CAirportData[] _AirportData; //size not known

Это метод, который я использую для создания массива:

...string[] airports = possibleAirports.Split(','); //size is known
foreach (string airport in airports)
 {
   string[] rwys = inif.Read(airport, "rwys").Split(':'); //size is known (2)
   _AirportData = new CAirportData[] { new CAirportData() { icao=airport, depRwy=rwys[0], arrRwy=rwys[1] } };
 }

Я знаю, что это просто сводитсяк моему ограниченному знанию объектов и массивов.Но я не могу найти что-либо в Интернете, что использует такие вещи.Я попытался скомбинировать код других людей с небольшим успехом.

Мне нужно, чтобы массив _AirportData был доступен вне формы, а значит, публично и объявлен вне каких-либо методов.Я полагаю, что основная проблема заключается в том, что я перезаписываю массив, и в каждом аэропорту я создаю новый массив, следовательно, теряю предыдущий.Я пытался переместить .. = new CAirportData [] во все виды мест, но Visual Studio это не нравится.

Ниже приведено определение класса для CAirportData:

public class CAirportData
{
    public string icao { get; set; }
    public string depRwy { get; set; }
    public string arrRwy { get; set; }

    public override string ToString()
    {
        string result = string.Format("ICAO: {0}, Dep: {1}, Arr: {2}", this.icao, this.depRwy, this.arrRwy);
        return result;
    }
}

public class CMRunways
{
    public string icao { get; set; }
    public string depRwy { get; set; }
    public string arrRwy { get; set; }
}

Многиезаранее спасибо за любую помощь!

Ответы [ 2 ]

3 голосов
/ 04 сентября 2011

То, что вы ищете, это общий списокИзмените определение на:

public List<CAirportData> _AirportData = new List<CAirportData>();

Тогда код в цикле:

_AirportData.Add(new CAirportData { icao=airport, depRwy=rwys[0], arrRwy=rwys[1] });
0 голосов
/ 04 сентября 2011

Это то, что я бы сделал ... Создайте статический класс со статическим свойством (airport) и добавьте статический конструктор для загрузки аэропортов из файла в начале.

 public static class Session
 {
     public static CAirportData[] _AirportData;

     static Session()
     {
         string airports = possibleAirports.Split(",");
         foreach (string airport in airports)
         {
             string[] rwys = inif.Read(airport, "rwys").Split(':'); //size is known (2)
             _AirportData = new CAirportData[] { new CAirportData() { icao=airport, depRwy=rwys[0], arrRwy=rwys[1] } };
         }
     }
 }

Теперь выможет получить доступ к массиву в любом месте проекта, как

MessageBox.Show(Session.CAirportData[0].depRwy);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...