2

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

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

我看到它是只读的(基于一些谷歌搜索,我别无选择。我可以修改数据,但我该如何向 ProcessList 添加数据?我试过 ProcessList.Add(~),但那不是在职的。

基本上,我真正想做的是将这个结构数组填充到 ListBox 控件中。我已经能够通过使用 DataSource 来填充它,我还能够修改内容并“重新数据源”它以更新 ListBox。但是,我不能添加或删除进程。有谁知道我能做什么?

4

2 回答 2

6

你需要使用一个集合。

AList<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您在问题中引用的方法。

于 2013-09-22T23:22:50.240 回答
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 }
};
于 2013-09-22T23:32:53.633 回答