我的代码段

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


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

现在的问题是,当我向库存添加清单中包含的所有元素,然后在下一行清除库存以再次开始时,我删除了库存中存储的所有元素。

有任何想法吗。我是否必须像股票[i] .Add(stock)那样对股票进行索引,以便类似股票的每一块都是股票中的一个元素。

谢谢你的帮助。

最佳答案

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

您可以通过在每次将stock添加到stocks时对其进行浅拷贝来解决此问题:

stocks.Add(stock.ToList());

10-08 11:13