I'm trying to return a IDictionary<int,int>
(created with dict tuplist
) from F# to C#, but it says that I must include a reference to FSharp.Core
because of System.Collections.IStructuralEquatable
.
I've tried returning a Dictionary<_,_>(dict tuplist)
, but that doesn't make any difference.
I even tried Dictionary<_,_>(dict tuplist, HashIdentity.Reference)
, but that says that int
is a struct...
UPDATE
OK, ME = STUPID
I just omitted to include in my question the crucial detail: which is that I was returning my dictionary in a F# record and that is the problem. Because I added the record and the Dictionary at the same time, and I saw the IStructuralEquality, I just assumed it was the dictionary which was the problem.
Doh! Sorry...
I think this should work. If you don't expose any F# specific type in the public signature, than you shouldn't need to reference the FSharp.Core.dll
assembly in your C# project (you'll still need to distribute it with the F# library, though).
I tried writing a simple example and I can compile the C# project without referencing FSharp.Core
. Could you try if the following project works for you:
http://dl.dropbox.com/u/5676796/test.zip ?
It declares a simple F# module:
module Module1
open System.Collections.Generic
let getDictionary() =
let d = new Dictionary<_, _>()
d.[10] <- 1
d :> IDictionary<int, int>
And the code that references it from C# looks like this:
var d = Module1.getDictionary();
Console.WriteLine("d 10 = " + d[10]);
Do you have any other public F# member that would expose some F# specific type (this may include things like F# records & discriminated unions, F# list, etc.)