将数据添加到struct数组中

时间:2013-09-22 23:20:13

标签: c# winforms

我正在尝试从已定义结构的数组中添加/删除数据。

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。但是,我无法添加或删除进程。有谁知道我能做什么?

2 个答案:

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