c# - 当返回类型不重要时,是否有更优雅的方法来合并可观察对象?

标签 c# system.reactive observable reactiveui

我有一个类似 ReactiveUI 的 View 模型。它有几个不同类型的属性,可以触发 NotifyPropertyChanged 事件,我想订阅一个方法,在触发任何事件时调用该方法,但我对实际值不感兴趣。

我当前的代码有点难看(由于不透明的 true 选择)。有没有一种表达方式,表明在事件发生时只关心的意图?

    this.ObservableForProperty(m => m.PropertyOne)
        .Select(_ => true)
        .Merge(this.ObservableForProperty(m => m.PropertyTwo).Select(_ => true))
   .Subscribe(...)

我正在合并大约 8 个属性,所以它比显示的更难看。

最佳答案

因为这看起来像 ReactiveUI,使用 WhenAny 运算符怎么样:

this.WhenAny(x => x.PropertyOne, x => x.PropertyTwo, (p1, p2) => Unit.Default)
    .Subscribe(x => /* ... */);

不过,一般来说,如果您要组合任意 Observable,您也可以使用非扩展方法将其写得更清楚一些:

Observable.Merge(
    this.ObservableForProperty(x => x.PropertyOne).Select(_ => Unit.Default),
    this.ObservableForProperty(x => x.PropertyTwo).Select(_ => Unit.Default),
    this.ObservableForProperty(x => x.PropertyThree).Select(_ => Unit.Default)
).Subscribe(x => /* ... */);

此外,如果您要订阅 ReactiveObject 的每个属性,最好只使用:

this.Changed.Subscribe(x => /* ... */);

关于c# - 当返回类型不重要时,是否有更优雅的方法来合并可观察对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8010372/

相关文章:

c# - 我如何使用 Reactive Extensions 将 IObservable<T>.Throttle() 与其他一些事件源结​​合起来?

Angular - 如何将多个 "valueChanges"observables 合并为一个

javascript - 迭代 observable.forkJoin 以处理多个数据库的 crud (API)

c# - RDotNet 内存故障

ios - 避免嵌套 Rx 订阅调用 - 原因是什么?

c# - 这种类型的功能或技术有名称吗?

c# - 如何使 IObservable<T> 的实现成为多线程的?

angular - 当函数返回间隔时,AsyncPipe 不工作

c# - Winforms 组合框数据绑定(bind)整个对象(无数据成员)

C# 私有(private)变量的歧义