如何在不编辑原点的情况下复制 BlockingCollection 并编辑新的

How to copy BlockingCollection and edit the new one without editing the origin

我想复制一份BlockingCollection并编辑副本。

(dataModelCollectionDataModelListRaw 的副本)

当我这样做时:

BlockingCollection<DataModel> dataModelCollection = DataModelListRaw;
while (dataModelCollection.TryTake(out _)) { }

我也清楚出处,因为有参考。

如果我为项目填写新的 BlockingCollection 项目,如下所示:

BlockingCollection<DataModel> dataModelCollection = new();

    foreach(var datamodel in DataModelListRaw)
    {
        dataModelCollection.Add(datamodel);
    }

while (dataModelCollection.TryTake(out _)) { }

有效。

但是有没有更短更优雅的方式来做这个副本?也许 BlockingCollection 中的方法?

随心所欲

var myCopy = dataModelCollection.ToList();

这将使用 IEnumerable 接口迭代集合并复制所有项目。然后,您可以根据需要对列表进行任何编辑。如果你需要一个实际的阻塞集合,你需要创建一个新的:

var blockingCollectionCopy = new BlockingCollection<DataModel>(new ConcurrentQueue<DataModel>(myCopy ));