Заполните поле со списком из другого класса - PullRequest
0 голосов
/ 25 декабря 2018

Поэтому я пытаюсь заполнить ComboBox из List, вызвав метод в другом классе, который вернет List.

public endStation()
    {
        InitializeComponent();
        startingStation.Items.Add("Test");
        Line CC = new Line();

        foreach (Station station in CC.GetCC())
        {
            startingStation.Items.Add($"{station.Number} {station.Desc}");
        } 
    }
public List<Station> GetCC()                         // Create List of CC Stations
    {
        var CC = new List<Station>();
        int count = 0;
        for (int i = 0; i < Program.file.Count; i++)
        {
            if (Program.file[i].Number.Contains("CC"))
            {
                CC.Insert(count, Program.file[i]);
                count++;
            }
        }
        return CC;
    }

1 Ответ

0 голосов
/ 25 декабря 2018

Ну, List<T> не имеет GetCC(), а Line;что-то вроде этого:

private void startingStation_SelectedIndexChanged(object sender, EventArgs e) {
  //TODO: you have to obtain Line instance here
  Line line = new Line();

  // In order to avoid constant redrawing: we want repaint combobox once,
  // after all items being inserted
  startingStation.BeginUpdate();

  try {
    // It is line (not List<T>) that provides GetCC() method
    foreach (Station station in line.GetCC()) {
      // String interpolation - $"..." is more readable than concatenation
      startingStation.Items.Add($"{station.Number} {station.Desc}");
    } 
  }
  finally {
    startingStation.EndUpdate();
  }
}

Редактировать: Вы можете улучшить GetCC() реализацию с помощью Linq (которая специально разработана для запросов):

using System.Linq;

...

class Line : Station {
  ...
  public List<Station> GetCC() {
    return file
      .Where(item => item.Number.Contains("CC"))
      .ToList();
  }
  ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...