2

我的代码片段

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 中包含的所有元素添加到stock然后在下一行清除 stock 重新开始时,我删除了所有存储在 stock 中的元素

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

谢谢你的帮助。

4

2 回答 2

3

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

您需要做的是更改此行:

stock.Clear();

对此:

stock = new List<optionsSort>();

这才是你真正的意思。:)

于 2013-07-20T14:34:21.287 回答
3

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

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

stocks.Add(stock.ToList());
于 2013-07-20T13:51:24.860 回答