将列表中的 属性 组合为单个可观察对象的反应式方法
Reactive method to combine property in list to single observable
我们正在努力寻找一种合适的方法来将元素列表中的 属性 值组合成单个可观察元素。这是一些示例代码(已简化):
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
主题并将其 merge/evaluate/condense 订阅到我们可以使用的单个可观察对象中。我们一直在做一些手工簿记,但我们的直觉告诉我们,这是反应式可以帮助的事情。
有什么帮助吗?
几乎所有用于组合 Observable 的扩展方法都提供了一个重载,它们采用 IEnumerable>。这应该符合您的要求:
IObservable<bool> allCompleted = Observable.CombineLatest(
list.Select(res => res.Completed),
completedValuesList => completedValuesList.All(isCompleted => isCompleted);
作为此答案的扩展,我想通知您有关 DynamicData 的信息。有了这个,您还可以针对特殊列表编写查询,即使列表发生变化,它也会为您提供有效的 allCompleted-Observable。
我们正在努力寻找一种合适的方法来将元素列表中的 属性 值组合成单个可观察元素。这是一些示例代码(已简化):
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
主题并将其 merge/evaluate/condense 订阅到我们可以使用的单个可观察对象中。我们一直在做一些手工簿记,但我们的直觉告诉我们,这是反应式可以帮助的事情。
有什么帮助吗?
几乎所有用于组合 Observable 的扩展方法都提供了一个重载,它们采用 IEnumerable
IObservable<bool> allCompleted = Observable.CombineLatest(
list.Select(res => res.Completed),
completedValuesList => completedValuesList.All(isCompleted => isCompleted);
作为此答案的扩展,我想通知您有关 DynamicData 的信息。有了这个,您还可以针对特殊列表编写查询,即使列表发生变化,它也会为您提供有效的 allCompleted-Observable。