Я пытаюсь воспроизвести некоторый код C #, который создает IObservable
из события Button.Click
.
Я хочу перенести этот код на F #.
Вот исходный код C #, который компилируется без ошибок:
Observable.FromEvent<RoutedEventHandler, RoutedEventArgs>(
h => new RoutedEventHandler(h),
h => btn.Click += h,
h => btn.Click -= h))
Вот моя неудачная попытка сделать то же самое на F #:
Observable.FromEvent<RoutedEventHandler, RoutedEventArgs>(
Func<EventHandler<RoutedEventArgs>, RoutedEventHandler>(fun h -> RoutedEventHandler(h)),
Action<RoutedEventHandler>(fun h -> btn.Click.AddHandler h),
Action<RoutedEventHandler>(fun h -> btn.Click.RemoveHandler h))
Все в порядке, кроме второй строки заявление.
Компилятор F # жалуется на забавный h -> RoutedEventHandler (h)
, потому что
Как видите, он принимает в качестве параметров объект
и RoutedEventArgs
, так что компилятор F # действительно правильный.
Есть ли какое-то волшебство, которое компилятор C # делает за кулисами, чтобы заставить эту работу работать, чего не делает компилятор F #, или я просто что-то здесь упускаю?
В любом случае, как я могу заставить это работать в F #?