C#分配一个类数组,但值被视为0

时间:2018-06-03 03:35:18

标签: c#

我目前停留在一个项目上。我必须实例化一个类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,它确实有效。

有没有人知道会发生什么以及如何解决这个问题?

1 个答案:

答案 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());
        }
    }
}