将列表中的属性组合为单个可观察的响应式方法

问题描述 投票:0回答:1

我们正在努力寻找一种合适的方法来将元素列表中的属性值组合为单个可观察元素。这是一些示例代码(简体):

public class Result {
  public ISubject<bool> Completed { get; }
}

public void SignalWhenAllIsDone(){
  List<Result> list = GetListOfResults(); //not important

  // somehow merge the list and the Completed property into a single observable
  IObservable<bool> allCompleted = ???;

  allCompleted.Subscribe(x => {
    Console.WriteLine("all results have completed");
  });  
}

[我们认为反应式工具箱中有一些魔术可以订阅所有Completed主题,并将其合并/评估/压缩为一个我们可以使用的可观察对象。我们一直在进行一些手动簿记,但是我们的直觉告诉我们,这是被动响应可以提供的帮助。

有帮助吗?

c# system.reactive reactive
1个回答
0
投票

几乎所有用于组合Observable的扩展方法都提供了IEnumerable >的重载。这应该符合您的要求:

IObservable<bool> allCompleted = Observable.CombineLatest(
              list.Select(res => res.Completed),
              completedValuesList => completedValuesList.All(isCompleted => isCompleted);

作为对此答案的扩展,我想通知您有关DynamicData的信息。使用此方法,您还可以针对特殊列表编写查询,即使列表发生更改,该列表也可以为您提供有效的allCompleted-Observable。

© www.soinside.com 2019 - 2024. All rights reserved.