我的代码段
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
时,这会同时反映在变量stock
和stocks
中的所有其他引用中。
您可以通过在每次将stock
添加到stocks
时对其进行浅拷贝来解决此问题:
stocks.Add(stock.ToList());