首页 > 解决方案 > 逻辑错误:“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");

标签: c#

解决方案


它发生是因为您正在分配对其他变量的引用并对其执行操作。

        var listSell = bsList; // **bsList has 47 JSON elements**
        listSell.RemoveAll(s => s.BuySell == "Buy");

这里 listSell 有 bsList 元素的引用,然后更新 listSell。

如果您不想要这种行为,那么您应该执行列表副本,如下所示

   List<Int32> copy = original.ToList(); //shallow copy

推荐阅读