首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >List<List>混淆

List<List>混淆
EN

Stack Overflow用户
提问于 2013-07-20 13:48:44
回答 2查看 101关注 0票数 2

我的代码片段

代码语言:javascript
复制
List<List<optionsSort>> stocks = new List<List<optionsSort>>();
optionsSort tempStock1 = new optionsSort();
List<optionsSort> stock = new List<optionsSort>();

然后是一些代码,

代码语言:javascript
复制
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(股票)这样的股票进行指数,这样,每一块类似的股票都是股票中的一个元素。

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2013-07-20 13:51:24

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

您可以通过每次将stock添加到stocks时创建一个浅拷贝来解决此问题。

代码语言:javascript
复制
stocks.Add(stock.ToList());
票数 3
EN

Stack Overflow用户

发布于 2013-07-20 14:34:21

您不是要创建一个新列表,而是使用one list,并重复填充和清除它。由于外部列表只包含一个重复多次的列表,该列表将在每个实例中具有相同的内容。也就是说,当您清除您的列表时,您就不能再访问旧的内容,即使您试图从外部列表中访问它们。

您需要做的是更改这一行:

代码语言:javascript
复制
stock.Clear();

对此:

代码语言:javascript
复制
stock = new List<optionsSort>();

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17762903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档