c# - C# 分配一个类数组,但值被视为 0
问题描述
我目前被困在一个项目上。我必须实例化一个类 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 个房间号。虽然如果我Rooms
用正确的 x 值替换,它确实有效。
这里有谁知道会发生什么以及如何解决这个问题?
解决方案
您的静态变量在调用构造函数之前初始化(特别是,一旦代码引用了类,它们就会被初始化)。默认情况下,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());
}
}
}
推荐阅读
- java - ITrustFrameworkPolicyCollectionPage“无法解析为类型”
- python - 从python中的第一个前任列表中确定前任和后继链
- kubernetes - 如何删除超过一个月的驱逐 pod
- d3.js - 力图中的意外重叠
- javascript - 如何在带有 React-Router 的 React 中路由到函数内的页面?
- shell - 错误 script_name.sh:第 13 行:[[0:找不到命令
- .net-core - WebAssembly Razor 客户端应用程序在使用管理员角色调用 Azure 中受保护的 API 时返回 401
- python - BeautifulSoup 在标签中查找部分字符串
- swiftui - SwiftUI:如何通过 NavigationLink 将动态生成的参数传递给子视图?
- shopware - Shopware 6 从后端调用 api