我目前停留在一个项目上。我必须实例化一个类x次。每次运行程序时,x的值都可能不同。这是我的澄清代码。
public partial class Form1 : Form
{
private static int Rooms;
private Room[] room = new Room[Rooms];
public Form1()
{
InitializeComponent();
Start();
}
private void Start()
{
string[] lines = File.ReadAllLines(@"C:Path\Test.txt");
Rooms = lines.Length;
for (int i = 0; i < room.Length; i++)
{
if (i == 13)
{
continue;
}
else
{
this.room[i] = new Room(i);
}
listBox1.Items.Add(this.room[i].RoomNumber.ToString());
}
}
}
调试时,将鼠标悬停在Rooms
Private static int Rooms;
上会显示正确的值;将鼠标悬停在Rooms
private Room[] room = new Room[Rooms];
也会显示正确的值,但将其视为0。它不会将房间号添加到列表框中。如果我使用Rooms + 1
,它只会增加1个房间号。虽然如果我用正确的x值替换Rooms
,它确实有效。
有没有人知道会发生什么以及如何解决这个问题?
答案 0 :(得分:2)
在调用构造函数之前初始化静态变量(具体来说,只要代码引用类就会初始化它们)。默认情况下,int
变量初始化为零,这就是为什么数组最初只有零元素,但在调试器中显示为正确的值。在分配Rooms
变量后,您需要移动数组初始化:
public partial class Form1 : Form
{
private static int Rooms;
private Room[] room;
public Form1()
{
InitializeComponent();
Start();
}
private void Start()
{
string[] lines = File.ReadAllLines(@"C:Path\Test.txt");
Rooms = lines.Length;
room = new Room[Rooms];
for (int i = 0; i < room.Length; i++)
{
if (i == 13)
{
continue;
}
else
{
this.room[i] = new Room(i);
}
listBox1.Items.Add(this.room[i].RoomNumber.ToString());
}
}
}