У меня есть следующая функция F #:
let myFSharpFunction : IO.TryTransform<IDatabaseService,EditForm,SyncType,ErrorDescription> =
fun _ _ -> Ok someValue
Я хотел бы использовать эту функцию F # в качестве значения / делегата в моем коде C #:
FSharpFunc<IDatabaseService, FSharpFunc<EditForm, FSharpResult<SyncType, ErrorDescription>>> referenceToFSharpFunction = myFSharpFunction;
Однако я получаюошибка:
Ошибка CS0428 Невозможно преобразовать группу методов 'myFSharpFunction' в тип без делегатов 'FSharpFunc >>'.Вы намеревались вызвать метод?
Затем я попытался:
public delegate FSharpResult<SyncType, ErrorDescription> myDelegate(IDatabaseService database, EditForm editForm);
...
myDelegate someDelegate = myFSharpFunction;
FSharpFunc<IDatabaseService, FSharpFunc<EditForm, FSharpResult<SyncType, ErrorDescription>>> FSharpFuncToInvoke = someDelegate;
Однако эта попытка также дала мне ошибку:
type'Sevan.Android.FormsSyncFragment.myDelegate' в 'Microsoft.FSharp.Core.FSharpFunc >>'
Обновление:
Попытка 1:
Затем я попытался добавить следующую функцию в модуль F #:
let toFunc2 f = Func<_, _, _> f // f : 'a -> 'b -> 'c
Затем я обновил код C # до следующего:
var referenceToFSharpFunction = toFunc2<IDatabaseService, EditForm, FSharpResult<SyncType, ErrorDescription>>(myFSharpFunction);
Но затем я получил эту ошибку:
Невозможно преобразовать группу методов 'FSharpFuncToInvoke' в тип без делегатов 'FSharpFunc >>'.Вы намеревались вызвать метод?
Попытка 2:
Я также попытался установить код F # следующим образом:
let toFunc2 f = Func<IDatabaseService,EditForm, Result<SyncType,ErrorDescription>> f // f : 'a -> 'b -> 'c
Затем в моем C # я попытался сделать следующее:
var referenceToFSharpFunction = toFunc2<IDatabaseService, EditForm, FSharpResult<SyncType, ErrorDescription>>(myFSharpFunctione);
Но эта попытка дала мне такую ошибку:
Ошибка CS0308 Неуниверсальный метод'Mock.toFunc2 (FSharpFunc >>)' нельзя использовать с аргументами типа
В заключение, как мне назначить многопараметрическую функцию F # для переменной C #?