2013-09-22 195 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 } 
};