如何使某些可观察到的物品加入并仅发射通过特定条件的人的值



我有一系列我需要在应用程序上运行的验证器:

public class Validator1 : IValidator
{
    public IObservable<ValidatorResult> Validate()
    {
        ....
    }
}
...
public class Validator2 : IValidator // this validator will return a fail
...
public class Validator3 : IValidator
...

现在,我需要按顺序运行它们,直到一个失败(ValidatorResult.Status == Status.Fail(。Where是我的第一个想法,但是当然,这不是一个很好的解决方案,因为它会杀死整个链。

所以我尝试了

之类的东西
Validator1.Validate(address)
    .Concat(Validator2.Validate(address)).Where(x => x.Status == ValidatorStatus.Successful)
    .Concat(Validator3.Validate(address))

,但最终链中未包含Validator2,并且Validator3最终被称为。

所以,我在这里想要的是,验证器和验证器2的信号会击中我的 Subscribe(),但之后什么也没有。

这将完成工作:

var chain = new IValidator[]
{
    new Validator1(),
    new Validator2(),
    new Validator3()
};
chain
    .Select(v => v.Validate())
    .Concat()
    .TakeWhile(vr => vr.Status == ValidatorStatus.Successful)
    .Subscribe(
        vr => Console.WriteLine(vr.Status),
        () => Console.WriteLine("Done"));

相关内容

  • 没有找到相关文章

最新更新