C#嵌套列表条目问题

时间:2011-11-08 21:56:40

标签: c# arrays nested-lists

我想在我的数据采集应用程序中使用嵌套列表来动态存储传入的16位数据。我创建了一个UInt16列表,并将其添加三次(NUMCHANNEL = 3)到List类型列表。现在我希望我可以按照代码显示的方式添加Uint16条目:

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 个答案:

答案 0 :(得分: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));

答案 1 :(得分:2)

因为你只有一个TBATT16 - 这是一个引用类型,这意味着在你的for循环中你实际上并没有每次添加新的空列表,你只是添加了相同的列表一遍又一遍地。然后你选择哪个参考并不重要 - 你总是得到相同的内部列表。

使用TBATT16替换循环体中的new List<UInt16>(),它将按预期工作。

有关C#中引用的详细信息,请参阅示例this article

答案 2 :(得分:0)

List是一种引用类型 - 因此您在LBATT16列表中拥有相同的对象3次。