2014-11-06 2 views
-5

У меня есть 2 файла, один содержит:Не удается достичь списка в другом классе в основном классе

namespace Vluchten_Boeken  
{ 
    public class Vluchten 
    { 
     public string FlightNr; 
     public string FlightCarrier; 
     public string Destination; 
     public int maxPassagers; 
     public int bookedPassagers; 

     public Vluchten(string _FlightNr, string _FlightCarrier, string _Destination, int _maxPassagers, int _bookedPassagers) 
     { 
      this.FlightNr = _FlightNr; 
      this.FlightCarrier = _FlightCarrier; 
      this.Destination = _Destination; 
      this.maxPassagers = _maxPassagers; 
      this.bookedPassagers = _bookedPassagers;  
     } 
    } 
} 

другой файл содержит:

namespace Vluchten_Boeken 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
     { 

      Console.Write(""); 

      foreach (Vluchten Vluchten in vluchtList) 
      { 
       Console.WriteLine(vluchtList); 
      } 
     } 
    } 
} 

Однако, я могу легко сделать foreach петлю на список в том же файле, что в списке находится, но когда я пытаюсь сделать это в другой файл, я получаю

Error 1 The name 'vluchtList' does not exist in the current context 

Это вероятно, легкое исправление, и, возможно, я искал неправильные вещи, но я не могу это решить.

+1

Google «контекст переменной» –

+0

Ive пытался создать свой список общественности, но это только дает мне больше ошибок .. – Hocho

+1

Вы никогда не объявлял 'vluchtList'. Что это должно быть? – Andrew

ответ

0

Ошибка сообщает вам, что vluchtList не определен.

В вашей строке «foreach (Vluchten Vluchten in vluchtList)» вы пытаетесь получить доступ к чему-то названному vluchtList, о котором компилятор не знает.

Прежде чем вы сможете использовать vluchtList, вам нужно будет определить его. Похоже, что он должен быть список, так что попробуйте это перед выше линии:

List<Vluchten> vluchtList = new List<Vluchten>(); 

Это будет определять переменную в список типа, то есть список объектов Vluchten.

Хотя это хорошо, ваш цикл Еогеасп не будет появляться, чтобы сделать что-нибудь с ним, потому что он пуст, так что вы, вероятно, хотите, чтобы заполнить его с некоторыми данными Vluchten:

vluchtList.Add(new Vluchten 
{ 
    FlightNr = "My Flight Number"; 
    FlightCarrier = "My Flight Carrier"; 
    Destination = "My Destination"; 
    maxPassagers = 200; 
    bookedPassagers = 130; 
}); 

Это только добавление одного Vluchten объект к списку, но вы можете добавить много.

+0

Спасибо. Нужно ли мне также публиковать этот список, если я хочу получить доступ к нему в другом классе? – Hocho

+0

Нет, использование открытого модификатора определяет уровень видимости свойств одного класса другим классам. Так, например, поскольку ваши свойства класса Vluchten являются общедоступными, любой экземпляр класса, который вы делаете в своем классе Vluchten_Boeken, будет иметь к ним доступ. – Kevin

0

3 проблемы:

  1. Ваш список vluchtList нигде не определено. Вы должны определить его и заполнить его некоторыми объектами Vluchten, чтобы выводить что угодно.
  2. В вашем цикле, вы должны использовать текущий vluchten объект из списка, делая свой вывод на консоль, а не выводить всю List<Vluchten> каждый раз
  3. Вы должны переопределить ToString() свойства вашего класса, так что он выводит что-то значимое. Без переопределения ToString() (который будет вызван внутренне в Console.WriteLine()) просто выплюнет некоторую информацию о типе Vluchten.

Вот пример кода, который должен помочь здесь:

public class Vluchten 
{ 
    // Existing code here . . . 

    // Override the ToString() method 
    public override string ToString() 
    { 
     return string.Format(
      "{0} flight #{1} is heading to {2} carrying {3} passengers out of {4} max.", 
      FlightCarrier, FlightNr, Destination, bookedPassagers, maxPassagers); 
    } 
} 

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
{ 
    // Normally this would be created and populated elsewhere. 
    // I've put it here for now because it's simpler for this example 
    var vluchtList = new List<Vluchten> 
     { 
      new Vluchten("flight1", "carrier1", "destination1", 10, 1), 
      new Vluchten("flight2", "carrier2", "destination2", 20, 2), 
      new Vluchten("flight3", "carrier1", "destination3", 30, 3), 
      new Vluchten("flight4", "carrier2", "destination1", 40, 4), 
      new Vluchten("flight5", "carrier1", "destination2", 50, 5), 
     }; 

    Console.WriteLine(""); 

    // In the real app, where we aren't creating the list above, it's possible 
    // that there may be no flights. So if the list is empty (or null) we can 
    // tell the user that there is no info (rather than not outputting anything) 
    if (vulchtList == null || !vluchtList.Any()) 
    { 
     Console.WriteLine("There is no flight information to display."); 
    } 
    else 
    { 
     foreach (Vluchten vluchten in vluchtList) 
     { 
      Console.WriteLine(vluchten); 
     } 
    } 
} 
Смежные вопросы