如何在不编辑原点的情况下复制 BlockingCollection 并编辑新的
How to copy BlockingCollection and edit the new one without editing the origin
我想复制一份BlockingCollection
并编辑副本。
(dataModelCollection
是 DataModelListRaw
的副本)
当我这样做时:
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 ));
我想复制一份BlockingCollection
并编辑副本。
(dataModelCollection
是 DataModelListRaw
的副本)
当我这样做时:
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 ));