Подтвердить что ты не робот

Взаимодействие между 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. Возможно ли это?

4b9b3361

Ответ 1

F # предоставляет конструкторы для всех типов делегатов, которые принимают значения F # соответствующих типов функций. Например. в вашем случае вы хотите использовать System.Func<_,_>(fun x -> ...), который применяет сгенерированный конструктор типа ('a -> 'b) -> System.Func<'a, 'b>.