0

对于Lists 我可以使用以下Union方法:

var finalCollection = new List<MyType>();
var list1= new List<MyType>();
var list2 = new List<MyType>();
finalCollection = list1.Union(list2).ToList();

但是当我尝试对ConcurrentBags 做同样的事情时,

var finalCollection = new ConcurrentBag<MyType>();
var bag1= new ConcurrentBag<MyType>();
var bag2= new ConcurrentBag<MyType>();
finalCollection = bag1.Union(bag2);

我得到:

无法将类型“System.Collections.Generic.IEnumerable<MyType>”隐式转换为“System.Collections.Concurrent.ConcurrentBag”

4

2 回答 2

3

也许问题是你正试图将元素联合成一个新的ConcurrentBag

工会后你实际得到的IEnumerableMyType

要回来ConcurrentBag尝试这样做:

var bag1 = new ConcurrentBag<MyType>();
var bag2 = new ConcurrentBag<MyType>();
var finalCollection = new ConcurrentBag<MyType>(bag1.Union(bag2));
于 2020-04-02T18:24:28.970 回答
1

var...

var finalCollection = new ConcurrentBag<MyType>();

...可能隐藏了问题所在。将其(精神上或明确地)扩展为...

ConcurrentBag<MyType> finalCollection = new ConcurrentBag<MyType>();

...应该清楚为什么不能将bag1.Union(bag2)返回的. 请注意,在 Visual Studio(代码)中,如果将鼠标悬停在关键字上,工具提示将显示变量的推断类型。IEnumerable<MyType>finalCollectionvar

此外,您的两个代码片段并不完全“相同”;在第一个中,您调用从 的结果ToList()创建 a ,但在第二个中,您尝试将结果直接分配给变量而不做任何实际使其成为a ,另一个答案显示了如何做。如果您从第一个代码片段中删除了 ,您会收到类似的错误。List<>Union()Union()ConcurrentBag<>ConcurrentBag<>.ToList()

于 2020-04-02T18:39:29.020 回答