The reason for this duplication is simply that System.Collections.Immutable
is a recent addition and is intended for use in C#, so its designers understandably didn't want people to have to reference FSharp.Core.dll
.
As for choosing between the two, I would use System.Collections.Immutable
in C# code and in F# code that is intended to be used from C#, and Microsoft.FSharp.Collections
in all other F# code. AFAIK there is no significant difference in terms of performance. Typical code will look like chained method calls with S.C.I and series of |>
calls with M.F.C but this is just a syntactic difference really -- conceptually it's the same thing.