c# - 如何将 IObservable<IObservable<T>> 转换为 IObservable<T>?

标签 c# .net f# observable reactive-programming

假设我有一个返回 IObservable<T> 的函数并且这个函数需要初始状态。

let myObservable (initialState: T) :IObservable<T> = (...)

但我只能从另一个可观察的对象获取初始状态,该可观察对象仅发出一次

let initializeObservable: IObservable<S> = (...)

如何将这两者结合起来得到 IObservable<T>

let resultObservable = initializeObservable |>
                       Observable.map (fun initialState -> myObservable initialState)

当前 resultObservable 为 IObservable<IObservable<T>>但我希望它是 IObservable<T>并在初始状态就绪后从 myObservable 发出值。

最佳答案

一般来说,如果您采用升高型 A<T> ,将其降低至T ,从 T -> U 投影它并抬起它以获得 A<U> ,该操作称为 bind .

Observable.bind (fun init -> myObservable init) initializeObservable

或者简化一下:

initializeObservable |> Observable.bind myObservable

至于你的方法,你已经差不多了。

initializeObservable 
|> Observable.map (fun initialState -> myObservable initialState)
|> Observable.mergeInner

即使你的 initializeObservable发射 n 次,你可以将所有的 observable 合并在一起,即使它只发射一次也同样有效。

关于c# - 如何将 IObservable<IObservable<T>> 转换为 IObservable<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62518415/

相关文章:

c# - 指定 WPF 图表的最小和最大轴

c# - 注册 ETW 提供商时遇到问题

c# - 使用 linq 从 List<T> 中删除顺序重复项

c# - 异常 : system. IO.FileNotFoundException : cannot find assembly or file Mysql. 数据

.net - NHibernate HQL 相当于 T-SQL 的 TOP 关键字

f# - F# + 可变字段记录中的相等推理

c# - C#.NET 项目中我们真的需要 ApplicationInsights.config 文件吗?

c# - 数据 GridView "index -1 does not have a value"

amazon-web-services - 无法在 AWS Lambda 的 .net 核心上加载文件或程序集 'AWSSDK.Core

f# - 重载时静态解析类型参数推断错误