我正在尝试从已定义结构的数组中添加/删除数据。
struct process
{
public int Proc_Id;
public int Proc_BurstTime;
public int Proc_Priority;
public override string ToString()
{
return "ID: " + Proc_Id.ToString() + " Time: " + Proc_BurstTime.ToString() + " Prior: " + Proc_Priority.ToString();
}
};
readonly process[] ProcessList = new process[]
{
new process{ Proc_Id = 1, Proc_BurstTime = 3000, Proc_Priority = 1},
new process{ Proc_Id = 2, Proc_BurstTime = 5000, Proc_Priority = 2},
new process{ Proc_Id = 3, Proc_BurstTime = 1000, Proc_Priority = 3},
new process{ Proc_Id = 4, Proc_BurstTime = 10000, Proc_Priority = 4}
};
我认为它是只读的(基于一些Google搜索,我没有其他选择。 我可以修改数据,但是如何将数据添加到ProcessList?我已经尝试过ProcessList.Add(〜),但那不起作用。
基本上,我正在尝试做的是将这个结构数组填充到ListBox控件中。我已经能够通过使用DataSource初始填充它,我也能够修改内容并“重新数据源”它来更新ListBox。但是,我无法添加或删除进程。有谁知道我能做什么?
答案 0 :(得分:6)
您需要使用集合。
List<T>
会很好。
var processes = new List<process>();
processes.Add(new process
{
Proc_Id = 1,
Proc_BurstTime = 3000,
Proc_Priority = 1
});
稍微修改一下你的代码会产生以下结果。
List<process> ProcessList = new List<process>()
{
new process {Proc_Id = 1, Proc_BurstTime = 3000, Proc_Priority = 1},
new process {Proc_Id = 2, Proc_BurstTime = 5000, Proc_Priority = 2},
new process {Proc_Id = 3, Proc_BurstTime = 1000, Proc_Priority = 3},
new process {Proc_Id = 4, Proc_BurstTime = 10000, Proc_Priority = 4}
};
此集合类型还包含您在问题中引用的Add
方法。
答案 1 :(得分:0)
使用readonly
可以防止变量ProcessList
被分配新列表。如果您删除了readonly
,则可以使用新的所需大小创建一个新数组,并将旧数组中的元素复制到该数组,然后将其分配给ProcessList
。这不太可能是你真正想要做的。相反,更好的解决方案是使用允许添加/删除元素的集合。一个数组一旦创建,就不能改变它的大小。构建List<T>
(或其他一些通用集合)以允许添加新元素或删除现有元素,并调整大小以反映当前元素的数量。
readonly List<process> ProcessList = new List<process>
{
new process { Proc_Id = 1, Proc_BurstTime = 3000, Proc_Priority = 1 },
new process { Proc_Id = 2, Proc_BurstTime = 5000, Proc_Priority = 2 },
new process { Proc_Id = 3, Proc_BurstTime = 1000, Proc_Priority = 3 },
new process { Proc_Id = 4, Proc_BurstTime = 10000, Proc_Priority = 4 }
};