c#dons';无法将结构添加到列表中

本文关键字:添加 结构 列表 c#dons | 更新日期: 2023-09-27 18:28:14

我有

struct Park
{
...
}

我需要将这个结构的10个元素添加到List中。

        public List<Park> Parks = new List<Park>();
        static void Main(string[] args)
        {
            new Program().CreatePark();
...
        }
        public void CreatePark()
        {
            for (int i = 1; i <= 10; i++)
            {
                Park temp = new Park();
                temp.ID = i;
                temp.Number = "abc";
                temp.Property = false;
                try
                {
                    Parks.Add(temp);
                }
                catch (ArgumentException)
                {
                    Console.WriteLine("oh no :(");
                }
                Console.WriteLine(temp.ToString());
            }
        }

这是行不通的。Console.WriteLine(temp.ToString());-这显示了struct元素,但当我想从Parks打印所有元素时,它不起作用。Parks。计数显示0。

c#dons';无法将结构添加到列表中

如果您使用的是语句:new Program().CreatePark();,那么在创建对象之后,将无法访问您创建的对象列表。您已经丢弃了包含List的对象的实例。你没有办法访问你创建的列表来知道你在其中放了什么。

代码的其余部分唯一可以做的就是创建一个完全独立的实例,该实例有自己的列表,与您填充的列表完全不同。

如果您想在填充列表后检查该列表,则需要保留对Program对象的引用。

Parks是一个实例变量。

CreateParks是一个实例方法。

Main是一个静态方法,因此您不能从中访问实例方法或变量

new Program()创建Program类的一个新实例。

由于新创建的程序没有存储在变量中,因此它将被丢弃,之后您将无法访问其Parks列表。

要访问Parks列表,您需要保留对程序类实例的引用,如下所示:

Program program = new Program();
program .CreateParks();
foreach(Park park in program .Parks)
{
  // Do something with the park
}

对于一个简单程序以外的任何程序,您最好拥有与在program类之外启动程序无关的所有逻辑。

例如,您可以创建一个新的ParkManager类,该类负责创建公园并提供对公园的访问。

你的程序看起来有点像这样:

public static class Program
{
    static void main(string[] args)
    {
        ParkManager parkManager = new ParkManager();
        parkManager.CreateParks();
        foreach (Park park in parkManager.Parks)
        {
            // do something with park
        } 
    }
}
public class ParkManager
{
    // Setter is private to prevent other classes from replacing the list
    // This doesn't prevent other classes from adding or removing,
    // replacing or editing items in the list
    public List<Park> Parks {get; private set;}
    // Constructor - you could populate the list from here if appropriate
    public void ParkManager()
    {
        Parks = new List<Park>();
    }
    public void CreateParks()
    {
      // Populate the list of parks here
    }
}