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