var
in ...
var finalCollection = new ConcurrentBag<MyType>();
... может скрывать, в чем проблема. Расширение его (мысленно или явно) до ...
ConcurrentBag<MyType> finalCollection = new ConcurrentBag<MyType>();
... должно прояснить, почему bag1.Union(bag2)
, который возвращает IEnumerable<MyType>
, нельзя присвоить finalCollection
. Обратите внимание, что в Visual Studio (код) при наведении указателя мыши на ключевое слово var
всплывающая подсказка покажет вам предполагаемый тип переменной.
Кроме того, ваши два фрагмента кода не совсем "одинаковы"; в первом вы вызываете ToList()
для создания List<>
из результата Union()
, а во втором вы пытаетесь присвоить результат Union()
непосредственно переменной ConcurrentBag<>
, не делая ничего для фактического сделать это a ConcurrentBag<>
, который другой ответ показывает, как это сделать. Если вы удалите .ToList()
из первого фрагмента кода, вы получите похожую ошибку.