Rx按标准过滤,n标准后过滤

Cel*_*Cel 5 .net c# linq system.reactive

仅按标准过滤

changes.Where(p => Evaluate(p)).Subscribe(p => { // Do something });
Run Code Online (Sandbox Code Playgroud)

但是,如何在满足标准后获得标准值和n值(并且这些n值不必与评估标准匹配)?

  • 例如,我想订阅一个返回的流Evaluate(p)和一个之后的值(然后再开始评估p)

And*_*iuk 4

请查看IEnumerable的SkipWhileTake扩展方法。您可以尝试以下代码:

changes.SkipWhile(change => Evaluate(change) == false).Take(n).Subscribe(change => { /* do something */ });
Run Code Online (Sandbox Code Playgroud)

编辑

新代码用于从带有项目尾部的序列中获取所有匹配项目n(无需重复检索项目)

// Let's assume elements in the sequence are of type Change
int i = 0;
Func<Change, bool> evaluateWithTail = change =>
{
    if (i <= 0 || i > n)
    {
        i = Evaluate(change) ? 1 : 0;
    }
    else
    {
        i++;
    }

    return i > 0;
}
// Please note delegate is specified as parameter directly - without lambda expression
changes.Where(evaluateWithTail).Subscribe(change => { /* do something */ });
Run Code Online (Sandbox Code Playgroud)