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。
如果您使用的是语句: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
}
}