c# - 逻辑错误:“bsList()”列表意外更改大小
问题描述
我将一个队列复制到一个列表中,“var bsList = bs.ToList();” 单步执行代码时,我注意到 bsList 从 47 个 JSON 元素变为 37 个。我看不出这怎么可能。当我到达这一行时,“var listBuy = bsList;” 在下面的代码中,它的元素较少。这怎么可能?
// bs queue to list
var bsList = bs.ToList();
//get all sell objects in a list
var listSell = bsList; // **bsList has 47 JSON elements**
listSell.RemoveAll(s => s.BuySell == "Buy");
// make the latest sell date object
DateCloseBuySell lastSell = new DateCloseBuySell();
lastSell = listSell.Aggregate((i1, i2) => i1.Date > i2.Date ? i1 : i2);
// remove lastSell object from ListSell
listSell.RemoveAll(s => s.Date == lastSell.Date);
// get the new latest sell date object
DateCloseBuySell lastSell2 = new DateCloseBuySell();
lastSell2 = listSell.Aggregate((i1, i2) => i1.Date > i2.Date ? i1 : i2);
// get the buy objects in a list
var listBuy = bsList; // **shows only 37 elements in bsList**
listBuy.RemoveAll(s => s.BuySell == "Sell");
解决方案
它发生是因为您正在分配对其他变量的引用并对其执行操作。
var listSell = bsList; // **bsList has 47 JSON elements**
listSell.RemoveAll(s => s.BuySell == "Buy");
这里 listSell 有 bsList 元素的引用,然后更新 listSell。
如果您不想要这种行为,那么您应该执行列表副本,如下所示
List<Int32> copy = original.ToList(); //shallow copy
推荐阅读
- c++ - 对多源文件项目中函数的未定义引用
- php - 如何覆盖 laravel 照亮 ServiceProvider
- reactjs - 如何解决反应中不变的失败错误
- flutter - 为什么列表视图长度仍然有错误
- java - 请帮我解决这个错误?
- pandas - 如何计算此熊猫表上的“滚动”统计信息,但时间窗口以数据点为中心?
- python - 使用 BeautifulSoup 进行网页抓取时无法捕获 html 元素
- python - Model 类和模型功能 API 的子类化在 tensorflow 中给出不同的结果
- angular - 无法使用 Angular 应用程序为树莓派创建 docker 映像
- javascript - 可以从 txt 文件中绘制值的 Javascript 图表