F#:Add方法和IObserver <>的关系是什么

Phi*_*ens 2 f# system.reactive

我有以下代码工作代码,我从Mark Seeman的Pluralsight视频中获得.我不明白最后一行是如何工作的.

let sharpObjectCollection = ConcurrentBag<Envelope<SharpObject>>()
let sharpObjectSubject = new Subjects.Subject<Envelope<SharpObject>>()
sharpObjectSubject.Subscribe sharpObjectCollection.Add |> ignore
Run Code Online (Sandbox Code Playgroud)

查看Subscribe文档,我看到它需要一个IObserver作为参数,但我传递的是ConcurrentBag.Add方法.

这里发生了什么?这是F#的一个特色吗?我也可以在c#中这样做吗?

Lee*_*Lee 5

看起来它正在调用这个扩展方法,它定义了Subscribe一个Action<T>带有onNext处理程序的重载.您也可以在C#中执行此操作:

var bag = new ConcurrentBag<Envelope<SharpObject>>();
var subject = new Subject<Envelope<SharpObject>>();
subject.Subscribe(bag.Add);
Run Code Online (Sandbox Code Playgroud)