我的代码片段
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简单地说,我通过一个大列表将元素排序成组,一个新的列表名为“股票”。
现在的问题是,当我将包含在列表股票中的所有元素添加到股票中,然后清除下一行中的股票以重新启动时,我会删除中存储在 stock 中的所有元素。
任何想法。我是否必须对stocksi.Add(股票)这样的股票进行指数,这样,每一块类似的股票都是股票中的一个元素。
谢谢你的帮助。
发布于 2013-07-20 13:51:24
问题是,List<T>对象与.NET中的所有类一样,都是引用类型。这意味着每次将stock添加到stocks时,您没有添加新的列表,而只是在内存中添加对相同列表的引用。因此,当您稍后调用Clear时,这将反映在变量stock和stocks中的所有其他引用中。
您可以通过每次将stock添加到stocks时创建一个浅拷贝来解决此问题。
stocks.Add(stock.ToList());发布于 2013-07-20 14:34:21
您不是要创建一个新列表,而是使用one list,并重复填充和清除它。由于外部列表只包含一个重复多次的列表,该列表将在每个实例中具有相同的内容。也就是说,当您清除您的列表时,您就不能再访问旧的内容,即使您试图从外部列表中访问它们。
您需要做的是更改这一行:
stock.Clear();对此:
stock = new List<optionsSort>();这才是你真正的意思。:)
https://stackoverflow.com/questions/17762903
复制相似问题