无法访问主类中其他类中的列表

本文关键字:列表 其他 访问 | 更新日期: 2023-09-27 18:29:30

我有两个文件,其中一个包含:

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 

这可能是一个简单的解决方案,也许我一直在谷歌上搜索错误的东西,但我无法解决。

无法访问主类中其他类中的列表

错误告诉您尚未定义vluchtList。

在您的行"foreach(vluchtList中的Vluchten-Vluchten)"中,您试图访问编译器不知道的名为vluchtList的内容。

在你可以使用vluchtList之前,你需要定义它。它看起来应该是一个列表,所以在上面的行之前试试这个:

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

这将把变量定义为List类型,即Vluchten对象的列表。

虽然这很好,但你的foreach循环似乎对它没有任何作用,因为它是空的,所以你可能想用一些Vluchten数据填充它:

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

这只是向列表中添加一个Vluchten对象,但您可以添加多个。

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);
        }
    }
}