我的代码片段
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(股票)等股指数,因此每个类似股票的股票都是股票的一个元素。
感谢您的帮助。
答案 0 :(得分:3)
问题是List<T>
对象与.NET中的所有类一样,都是引用类型。这意味着,每次向stock
添加stocks
时,您都不会添加新列表,而只是添加对相同的引用在内存中列出。因此,当您稍后致电Clear
时,这会反映在您的变量stock
和stocks
中的所有其他引用中。
每次将stock
添加到stocks
时,您都可以通过制作stocks.Add(stock.ToList());
的浅层副本来解决此问题:
{{1}}
答案 1 :(得分:3)
您没有创建新列表,您正在使用一个列表,并填写并重复清除它。由于您的外部列表只包含一个列表,重复多次,因此该列表在每个实例中都具有相同的内容。也就是说,当您清除列表时,即使您尝试从外部列表中访问它们,也无法再访问旧内容。
您需要做的是更改此行:
stock.Clear();
对此:
stock = new List<optionsSort>();
这就是你真正的含义。 :)