2013-09-22 146 views
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中。添加(〜),但这不起作用

基本上,我正在尝试做的是将这个结构数组填充到一个ListBox控件中,我已经能够使用DataSource来初始化它,我已经也能够修改内容和“重新数据源”来更新列表框,但是我不能添加或删除进程,有谁知道我能做什么?

+0

你已经声明它是只读的,但为什么? Google告诉你什么,更重要的是,你在问什么? 另外,是否有一个原因,你必须使用结构?我真的推荐使用列表而不是T是一个类。如果这些结构是从您无法控制的源提供给您的,那么您可以随时将它们映射到具有简单函数的类对象中。 –

+0

您不能将元素添加到数组中,您需要使用列出或创建一个包含5个元素的新数组,然后复制4个已定义的元素并添加一个。 – doobop

回答

6

您需要使用集合。

A 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方法你指的是你的问题。

0

使用readonly可防止为变量ProcessList分配新列表。如果删除了readonly,则可以使用新的所需大小创建一个新阵列,并将旧阵列中的元素复制到该阵列中,然后将其分配给ProcessList。这不太可能是你真正想要做的。相反,更好的解决方案是使用允许添加/删除元素的集合。数组一旦创建,就不能改变其大小。 A 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 } 
};