C# 如何使用反应式扩展解决这个问题?

C# 如何使用反应式扩展解决这个问题?,c#,system.reactive,C#,System.reactive,我有一个关于无功扩展的设计问题,下面是场景: 我有一个car对象,该car对象有多个验证对象。每个验证对象都会将验证结果发送到car类。验证结果可以是成功的,也可以是错误的。当验证发送错误时,我想停车,当相同的验证发送成功时,我想再次启动汽车。 换言之: 所有验证都会不断向car发送验证结果。如果所有验证都发送成功消息,我希望汽车继续行驶,但如果其中一个发送错误消息,我希望停车,直到收到验证成功消息 我正试图通过反应式扩展找到解决方案 有什么想法吗 非常简单,谢谢。如果您有一个名为xss的IEn

我有一个关于无功扩展的设计问题,下面是场景: 我有一个car对象,该car对象有多个验证对象。每个验证对象都会将验证结果发送到car类。验证结果可以是成功的,也可以是错误的。当验证发送错误时,我想停车,当相同的验证发送成功时,我想再次启动汽车。 换言之:

所有验证都会不断向car发送验证结果。如果所有验证都发送成功消息,我希望汽车继续行驶,但如果其中一个发送错误消息,我希望停车,直到收到验证成功消息

我正试图通过反应式扩展找到解决方案

有什么想法吗


非常简单,谢谢。如果您有一个名为
xss
IEnumerable
(可以是一个数组或可观察对象列表),那么您可以执行以下操作:

IObservable<bool> combined =
    xss
        .CombineLatest()
        .Select(xs => xs.Aggregate((b0, b1) => b0 && b1));
IObservable组合=
xss
.CombineLatest()
.Select(xs=>xs.Aggregate((b0,b1)=>b0&&b1));
现在,只有当所有观察值的最新值为
true
时,
combined
才会为
true


请注意,这将仅在所有源观测值都已产生值时产生值。如果你需要一个起始条件,源观测值应该有一个默认值,使用
StartWith
扩展方法提供。

这很完美,正是我需要的。谢谢