如何将concurrentbag转换成列表?

时间:2016-07-22 06:53:23

标签: c# .net

我几乎无法同时完成任务。由于列表不是线程安全的,我使用的是concurrentbag。完成所有任务后,我想将concurrentbag转换为列表。

我有searched in MSDN但无法找到任何可以将concurrentbag转换为c#列表的API。我该怎么办?

注意:我必须转换为列表,这是必要的。

我还有其他选项可以在列表中应用锁,但我想在构建concurrentbag中使用,这是线程安全的。

5 个答案:

答案 0 :(得分:8)

您可以使用ToList扩展方法。

var list = concurrentBag.ToList();

答案 1 :(得分:5)

ConcurrentBag的扩展方法为.ToList() - 它实现了IEnumerable<T>

var someList = someConcurrentBag.ToList();

答案 2 :(得分:3)

ConcurrentBag具有ToList()方法。

答案 3 :(得分:0)

如果您的内部项目不是列表,请使用

var someList = someConcurrentBag.ToList();

或者你可以尝试如下如果cbag中的每个项目都已经是一个列表。

E.g。就我而言ConcurrentBag<List<int>>

ConcurrentBag<List<string>> jobErrorsColl = new ConcurrentBag<List<string>>();

// Got something in jobErrorsColl
List<string> multipleJobErrors = new List<string>();
List<string> singleJobErrors = new List<string>();

while (jobErrorsColl.IsEmpty)
{
    jobErrorsColl.TryPeek(out singleJobErrors);
    multipleJobErrors.AddRange(singleJobErrors);
}

return multipleJobErrors;  

对于相同的

,MSDN链接为here

答案 4 :(得分:-1)

您可以使用以下命令将currentbag转换为列表:

var list = = someConcurrentBag.SelectMany(r => r).ToList();