gpt4 book ai didi

c# - 值与 Rx 之间

转载 作者:行者123 更新时间:2023-12-04 02:10:12 31 4
gpt4 key购买 nike

Rx 中是否有一些扩展方法来完成下面的场景?

Between values

我有一个开始泵送的值(绿色圆圈)和其他停止泵送的值(簧片圆圈),蓝色圆圈应该是预期值,我不希望这个命令被取消并重新创建(即“TakeUntil”和“SkipUntil”将不起作用。

使用 LINQ 的实现是这样的:

  public static IEnumerable<T> TakeBetween<T>(this IEnumerable<T> source, Func<T, bool> entry, Func<T, bool> exit)
{
bool yield = false;
foreach (var item in source)
{
if (!yield)
{
if (!entry(item))
continue;

yield = true;
continue;
}

if (exit(item))
{
yield = false;
continue;
}

yield return item;
}
}

IObservable<T> 怎么会有同样的逻辑? ?

最佳答案

以下是您需要的扩展方法:

public static IObservable<T> TakeBetween<T>(
this IObservable<T> source,
Func<T, bool> entry,
Func<T, bool> exit)
{
return source
.Publish(xs =>
{
var entries = xs.Where(entry);
var exits = xs.Where(exit);
return xs.Window(entries, x => exits);
})
.Switch();
}

我在其中包含的关键内容是 Publish 扩展的使用。在这种特殊情况下,这很重要,因为您的源可观察值可能是“热的”,这使得源值可以共享而无需创建对源的多个订阅。

关于c# - 值与 Rx 之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18791622/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com