2011-05-17 67 views
7

什麼是C#中的收集好來存儲數據如下:好的C#集合

我已經檢查在subjectId,varnumber,VARNAME,以及與每個複選框相關的標題帶來的箱子。

我需要一個集合,可以是任意大小,像ArrayList中也許有可能:

 list[i][subjectid] = x; 
     list[i][varnumber] = x; 
     list[i][varname] = x; 
     list[i][title] = x; 

什麼好的建議?

回答

14

A List<Mumble>其中Mumble是存儲屬性的小助手類。

List<Mumble> list = new List<Mumble>(); 
... 
var foo = new Mumble(subjectid); 
foo.varnumber = bar; 
... 
list.Add(foo); 
,.. 
list[i].varname = "something else"; 
+1

爲嘟class類的幫助,見下面 – chris 2011-05-17 23:27:23

0

您可能想爲此使用two-dimensional array,併爲每個值分配陣列第二維中的位置。例如,list[i][0]將是subjectid,list[i][1]將是varnumber,依此類推。

+0

第一維可以增長還是縮小,還是必須提前分配特定的大小? – chris 2011-05-17 23:16:03

+4

Yuck。沒有[幻數](http://en.wikipedia.org/wiki/Magic_number_(編程))。他們很難排除路上六個月的故障。 – 2011-05-17 23:17:54

+0

這不是一個很好的解決方案,因爲這些索引是弱類型的。 (即你必須知道索引0是被忽略的)。 – Alan 2011-05-17 23:18:11

7
public Class MyFields 
{ 
    public int SubjectID { get; set; }   
    public int VarNumber { get; set; } 
    public string VarName { get; set; } 
    public string Title { get; set; } 
} 

var myList = new List<MyFields>(); 

要訪問的成員:

var myVarName = myList[i].VarName; 
1

泛型列表,List<YourClass>將是巨大的 - 在YourClass有subjectid,varnumber等

0

的性質確定哪些集合,通常從你想用它做什麼開始?

如果你的唯一標準是它可以anysize,那麼我會考慮List<>

0

由於這是一個鍵,值對我會建議你使用一個通用的基於IDictionary收集。

// Create a new dictionary of strings, with string keys, 
// and access it through the IDictionary generic interface. 
IDictionary<string, string> openWith = 
    new Dictionary<string, string>(); 

// Add some elements to the dictionary. There are no 
// duplicate keys, but some of the values are duplicates. 
openWith.Add("txt", "notepad.exe"); 
openWith.Add("bmp", "paint.exe"); 
openWith.Add("dib", "paint.exe"); 
openWith.Add("rtf", "wordpad.exe"); 
+0

字典將不會工作,因爲主觀,varnumbers都綁在一起作爲一個獨特的主鍵,所以你不能有相同的主題字典字典dictSubject(這就是問題我有) – chris 2011-05-17 23:19:58

+0

我通常使用漢斯方法,因爲它允許你強烈地鍵入整個集合,所以這可能是最好的選擇。然後你可以使用枚舉來表示鍵。 – 2011-05-17 23:22:10

0

正如其他人所說,那樣子你會更好,創建一個類,使您的列表返回一個包含所有你需要的數據的對象來保存值。雖然二維數組可能很有用,但這看起來不像這些情況之一。

有關更好的解決方案,爲什麼在這種情況下二維數組/列表可能不是你所想讀一個好主意,瞭解更多信息:Create a list of objects instead of many lists of values

0

如果有外部機會的[i]順序是不是在可預知的順序,或可能有差距,但你需要使用它作爲一個重點:

public class Thing 
{ 
    int SubjectID { get; set; }   
    int VarNumber { get; set; } 
    string VarName { get; set; } 
    string Title { get; set; } 
} 

Dictionary<int, Thing> things = new Dictionary<int, Thing>(); 
dict.Add(i, thing); 

然後找到一個Thing

var myThing = things[i];