Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 给定布尔的可观测值,导出一秒钟后变为false的可观测值_.net_Linq_System.reactive_Observable - Fatal编程技术网

.net 给定布尔的可观测值,导出一秒钟后变为false的可观测值

.net 给定布尔的可观测值,导出一秒钟后变为false的可观测值,.net,linq,system.reactive,observable,.net,Linq,System.reactive,Observable,我有一个可观察的布尔IObservable。我想导出一个新的观测值,类似于旧的观测值,但在每个真值后一秒钟插入额外的假值 例如,如果原件是 time value 0 false 2 true 5 true 8 false 新的可观察到的将是 time value 0 false 2 true 3 false 5 true 6 false 8 false 你能帮忙吗 编辑:下面是一个测试您的解决方案的示例 O

我有一个可观察的布尔
IObservable
。我想导出一个新的观测值,类似于旧的观测值,但在每个真值后一秒钟插入额外的假值

例如,如果原件是

time  value
   0  false
   2  true
   5  true
   8  false
新的可观察到的将是

time  value
   0  false
   2  true
   3  false
   5  true
   6  false
   8  false
你能帮忙吗


编辑:下面是一个测试您的解决方案的示例

Observable.Interval(TimeSpan.FromSeconds(1))
  .Where(x => x % 2 == 0)
  .Select(x => x % 3 != 0) 
像这样的

someBoolObservable.SelectMany(x =>
    Observable.Merge(
        Observable.Return(x), 
        x ? Observable.Timer(TimeSpan.FromSeconds(1)).Select(_ => false) : Observable.Empty<bool>()));
someBoolObservable。选择many(x=>
可观察,合并(
可观察。返回(x),
x?Observable.Timer(TimeSpan.FromSeconds(1)).Select(=>false):Observable.Empty());

我不太明白。您不能创建一个延迟任务,根据原始集合创建所需集合吗?@BrianRasmussen go onDo您想更改原始集合还是基于原始集合创建新集合?在任何情况下,我都可以想象你可以简单地完成任务。延迟后继续更新原始集合或创建新集合。我更喜欢Paul的
SelectMany
,而不是更直观的
Merge
,因为它本质上只有一个源订阅。嘿,Paul,检查我的编辑吗?我认为“Interval”应该是“Timer”。根据我在问题中的评论,我更喜欢这种方法+1我想要一个在一定时间后生成单个值并完成的,我永远记不起5045x重载中的哪一个:)间隔始终是周期性的,带有一个arg或一个arg+调度程序的计时器是单一事件。
someBoolObservable.SelectMany(x =>
    Observable.Merge(
        Observable.Return(x), 
        x ? Observable.Timer(TimeSpan.FromSeconds(1)).Select(_ => false) : Observable.Empty<bool>()));