我有
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.Count显示为0.
答案 0 :(得分:0)
鉴于您正在使用语句:new Program().CreatePark();
,您创建的对象列表在创建后无法访问。您已经丢弃了持有List
的对象的实例。您无法访问您创建的列表以了解其中包含的内容。
其余代码可能做的唯一事情是创建一个完全独立的实例,该实例具有自己的列表,一个与您填充的列表完全不同。
如果要在填充后检查列表,则需要保留对Program
对象的引用。
答案 1 :(得分:0)
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
}
}