リアクティブ拡張機能を使用した次のコードスニペットがあります。
let value : 't = ...
Observable.Create<'t>(fun observer ->
let subject = new BehaviorSubject<'t>(value)
let d0 = subject.Subscribe(observer)
let d1 = observable.Subscribe(subject)
new CompositeDisposable(d0, d1) :> IDisposable
)
これは機能します。ただし、アップキャストをIDisposableにドロップすると、あいまいなオーバーロードが原因で、コードのコンパイルに失敗します。ただし、CompositeDisposableはIDisposableです。型推論エンジンがこれを解決できないのはなぜですか?このパターンは、C#でほぼ常に使用しており、アップキャストせずにObservable.CreateからCompositeDisposableを返します。