Как я могу вернуть словарь из F # в C # без необходимости включать FSharp.Core? - PullRequest
3 голосов
/ 14 апреля 2010

Я пытаюсь вернуть IDictionary<int,int> (созданный с dict tuplist) из F # в C #, но он говорит, что я должен включить ссылку на FSharp.Core из-за System.Collections.IStructuralEquatable.

Я пытался вернуть Dictionary<_,_>(dict tuplist), но это не имеет значения.

Я даже пытался Dictionary<_,_>(dict tuplist, HashIdentity.Reference), но это говорит о том, что int это структура ...

UPDATE

OK, ME = Глупый

Я просто не включил в свой вопрос важную деталь: что я возвращал свой словарь в записи F #, а , что проблема . Поскольку я добавил запись и словарь одновременно и увидел IStructuralEquality, я просто предположил, что проблема заключалась в словаре.

Doh! К сожалению ...

Ответы [ 2 ]

3 голосов
/ 14 апреля 2010

Я думаю, что это должно работать. Если вы не предоставляете какой-либо специфичный для F # тип в публичной подписи, вам не нужно ссылаться на сборку FSharp.Core.dll в вашем проекте C # (вам все равно придется распространять его с библиотекой F #). 1002 *

Я попытался написать простой пример, и я могу скомпилировать проект 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 # и т.

2 голосов
/ 14 апреля 2010

(я не проверял это, но подозреваю ...)

Вы звоните dict, который создает F # -специфическую реализацию IDictionary, для которой требуется FSharp.Core. Если вместо этого вы используете Dictionary в качестве конкретной реализации, она будет работать. Вы можете даже сделать new Dictionary<_,_>(dict tupleList), и все будет в порядке, поскольку это скопирует структуру F # в словарь .NET.

...