Блок питания F# идет с рядом методов преобразования для перевода из Func <...> к функциям F#, или стандарт или tupled. Но это возможный достигнуть противоположного: в случае, если Вы хотите назвать из кода F# метод C#, который берет Func <...>, и хотят использовать собственное лямбда-выражение F# (например, забава x-> some_function_of (x))?
Если я отправляю функцию F# с подписью '-> 'b к методу C#, который ожидает Func затем, компилятор F# генерирует следующую ошибку:
This expression was expected to have type Function<'T,'R> but here has type 'T -> 'R
Я хочу остаться с лямбда-выражениями F#, но использовать слой перевода, чтобы смочь отправить их как лямбда C# Func. Действительно ли это достижимо?
F# предоставляет конструкторы для всех типов делегатов, которые принимают F# значения соответствующих типов функций. Например, в вашем случае вы хотите использовать System.Func<_,_>(fun x -> ...)
, который применяет порожденный конструктор типа ('a -> 'b) -> System.Func<'a, 'b>
.