列出<list> confusion </list>

时间:2013-07-20 13:48:44

标签: c# list

我的代码片段

List<List<optionsSort>> stocks = new List<List<optionsSort>>();
optionsSort tempStock1 = new optionsSort();
List<optionsSort> stock = new List<optionsSort>();

然后是一些代码,

for (int j = 1; j < optionsSt.Count; j++)
{

            if (optionsSt[j].isin == optionsSt[j - 1].isin)
            {

                tempStock1.name = optionsSt[j].name;
                tempStock1.date = optionsSt[j].date;
                tempStock1.strike = optionsSt[j].strike;
                tempStock1.size = optionsSt[j].size;
                tempStock1.isin = optionsSt[j].isin;
                tempStock1.callPut = optionsSt[j].callPut;

                stock.Add(tempStock1);

            }
            else
            {

                stocks.Add(stock);

                k = k + 1;
                stock.Clear();

                tempStock1.name = optionsSt[j].name;
                tempStock1.date = optionsSt[j].date;
                tempStock1.strike = optionsSt[j].strike;
                tempStock1.size = optionsSt[j].size;
                tempStock1.isin = optionsSt[j].isin;
                tempStock1.callPut = optionsSt[j].callPut;

                stock.Add(tempStock1);



            }




        }//endfor

基本上,我会通过一个大型列表将元素分组,一个新的List名称库存。

现在问题是,当我添加股票列表股票中包含的所有元素然后清除下一行的股票再次开始时,我删除了我存储在

任何想法。我是否必须为股票[i] .Add(股票)等股指数,因此每个类似股票的股票都是股票的一个元素。

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

问题是List<T>对象与.NET中的所有类一样,都是引用类型。这意味着,每次向stock添加stocks时,您都不会添加列表,而只是添加对相同的引用在内存中列出。因此,当您稍后致电Clear时,这会反映在您的变量stockstocks中的所有其他引用中。

每次将stock添加到stocks时,您都可以通过制作stocks.Add(stock.ToList()); 的浅层副本来解决此问题:

{{1}}

答案 1 :(得分:3)

您没有创建新列表,您正在使用一个列表,并填写并重复清除它。由于您的外部列表只包含一个列表,重复多次,因此该列表在每个实例中都具有相同的内容。也就是说,当您清除列表时,即使您尝试从外部列表中访问它们,也无法再访问旧内容。

您需要做的是更改此行:

stock.Clear();

对此:

stock = new List<optionsSort>();

这就是你真正的含义。 :)