2011-11-08 70 views
3

我想在我的數據採集應用程序中使用嵌套列表動態地存儲我的傳入16位數據。我創建了一個UInt16的列表,並將它添加到列表類型列表中三次(NUMCHANNEL = 3)。現在,我希望我可以添加一個標記Uint16條目的方式代碼如下所示:C#嵌套列表條目問題

public List<UInt16> TBATT16 = new List<UInt16>(); 
public List<List<UInt16>> LBATT16 = new List<List<UInt16>>(); 
for (int i = 0; i < NUMCHANNEL; ++i) 
     { 
      LBATT16.Add(TBATT16); 
     } 

LBATT16[0].Add((ushort)(0x1155)); 

它不添加一個條目,但不是唯一的LBATT16 [0],但所有LBATT16名單。我在這裏做錯了什麼?

回答

3

您需要將您的列表創建循環內:

public List<List<UInt16>> LBATT16 = new List<List<UInt16>>(); 
for (int i = 0; i < NUMCHANNEL; ++i) 
{ 
    //Make a unique list for each element 
    public List<UInt16> TBATT16 = new List<UInt16>(); 
    LBATT16.Add(TBATT16); 
} 

LBATT16[0].Add((ushort)(0x1155)); 
+0

謝謝,裏德!這就是我想要做的。 – JustGreg

0

列表是一個引用類型 - 因此您在LBATT16列表中擁有3次相同的對象。

+0

謝謝福建聯合石化! – JustGreg

2

因爲您只有一個TBATT16 - 這是一個引用類型,這意味着在您的for循環中,您實際上並不是每次都添加新的空列表,而只是一遍又一遍地添加相同的列表。然後,你選擇哪個參考並不重要 - 你始終得到相同的內部列表。

TBATT16替換爲new List<UInt16>()的循環體,它將按預期工作。請參考this article

+0

謝謝!我不知道列表是引用類型。感謝您指出。 – JustGreg