3

IDictionary<int,int>(で作成されたdict tuplist)をF#からC#に戻そうとしていますが、。FSharp.Coreのためにへの参照を含める必要があると表示されSystem.Collections.IStructuralEquatableます。

を返してみましたDictionary<_,_>(dict tuplist)が、違いはありません。

私も試しDictionary<_,_>(dict tuplist, HashIdentity.Reference)ましたが、それは構造体だと言っていintます...

アップデート

OK、ME = STUPID

質問に重要な詳細を含めることを省略しました。これは、辞書をF#レコードで返すことであり、それが問題です。レコードと辞書を同時に追加し、IStructuralEqualityを見たので、問題は辞書だと思っただけです。

ドー!ごめん...

4

2 に答える 2

3

これでうまくいくと思います。パブリック署名でF#固有のタイプを公開しない場合はFSharp.Core.dll、C#プロジェクトでアセンブリを参照する必要はありません(ただし、F#ライブラリで配布する必要があります)。

簡単な例を書いてみましたが、を参照せずにC#プロジェクトをコンパイルできますFSharp.Core。次のプロジェクトがうまくいくかどうか試してみてください:http: //dl.dropbox.com/u/5676796/test.zip

単純なF#モジュールを宣言します。

module Module1
open System.Collections.Generic

let getDictionary() = 
  let d = new Dictionary<_, _>()
  d.[10] <- 1
  d :> IDictionary<int, int>

そして、C#からそれを参照するコードは次のようになります。

var d = Module1.getDictionary();
Console.WriteLine("d 10 = " + d[10]);

F#固有のタイプを公開する他のパブリックF#メンバーはありますか(これには、F#レコードと識別された共用体、F#リストなどが含まれる場合があります)

于 2010-04-14T13:42:27.733 に答える
2

(私はこれを確認していませんが、私は疑っています...)

を呼び出しています。これにより、 FSharp.Coreを必要とdictするF#固有の実装が作成されます。IDictionary代わりにDictionary、具体的な実装として使用すると、機能します。new Dictionary<_,_>(dict tupleList)F#構造を.NETディクショナリにコピーするので、おそらく実行することもでき、問題はありません。

于 2010-04-14T15:13:49.020 に答える