Взаимодействие между F # и C # лямбдами - PullRequest
24 голосов
/ 03 августа 2010

F # powerpack поставляется с набором методов преобразования для перевода из функций Func <...> в F #, как стандартных, так и связанных. Но возможно ли достичь обратного: если вы хотите вызвать из кода F # метод C #, который принимает Func <...> и хотите использовать собственное лямбда-выражение F # (например, fun x -> some_function_of (x))? 1001 *

Если я отправляю функцию F # с подписью 'a ->' b методу C #, ожидающему Func, то компилятор F # генерирует следующую ошибку:

This expression was expected to have type Function<'T,'R> but here has type 'T -> 'R

Я хочу остаться с лямбда-выражениями F #, но использовать слой перевода, чтобы можно было отправлять их как C # Func lambda. Это достижимо?

1 Ответ

32 голосов
/ 03 августа 2010

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

...