我想复制一个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 _)) { }

它起作用了.

但是,有没有一种更简洁、更优雅的方式来复制呢?也许是百分之一百的方法?

推荐答案

就这么做吧

var myCopy = dataModelCollection.ToList();

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

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

Csharp相关问答推荐

无法从具有一对多关系的C#类中使用Swagger创建记录

ASP.NET MVC购物车数量更新并从购物车中删除项目

读取配置文件(mytest. exe. config)

使用客户端密钥为Fabric Rest API生成令牌

如何阻止注释被包含在C#release build. exe中

C#EF Core 8.0表现与预期不符

如何将ASP.NET Core 2.1(在.NET框架上运行)更新到较新的版本?

在允许溢出的情况下将小数转换为长

方法从数据表中只 Select 一个条件?

从VS调试器而不是测试资源管理器运行的调试NUnitDotNet测试

为什么@rendermode Interactive Auto不能在.NET 8.0 Blazor中运行?

try 链接被委派者(多播委托)时,无法将获取运算符应用于类型为';方法组&39;和方法组';的操作数

等待一个等待函数

在扩展方法中,IEnumerable<;T>;不会转换为IEumerable<;T&>

在C#ASP.NET内核中使用INT AS-1进行控制器场景的单元测试

如何强制新设置在Unity中工作?

C#System.Commandline:如何向命令添加参数以便向其传递值?

如何使用IHostedService添加数据种子方法

如何从SignalR获取连接客户端的域

使用SQL Server 2022+时,我是否必须将代码从SqlConnection类对象中迁移出来?