Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.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
C# 如何使用Rx检索序列生成器的生命周期操作?_C#_.net_Linq_System.reactive - Fatal编程技术网

C# 如何使用Rx检索序列生成器的生命周期操作?

C# 如何使用Rx检索序列生成器的生命周期操作?,c#,.net,linq,system.reactive,C#,.net,Linq,System.reactive,我需要一种方法来检索序列之前生成的所有对象,以及新的对象,当我收到关于它的更改的通知时,使用Rx。我认为这是不常见的,因为大多数系统只需要未处理的条目,但我的情况需要一整套新旧值才能工作 有可能以某种方式实现这一点吗?我找不到任何类似的示例,似乎也没有任何方法可以做到这一点。您可以使用 IObservable<T> source = ...; IObservable<List<T>> history = source .Scan(new List<

我需要一种方法来检索序列之前生成的所有对象,以及新的对象,当我收到关于它的更改的通知时,使用Rx。我认为这是不常见的,因为大多数系统只需要未处理的条目,但我的情况需要一整套新旧值才能工作

有可能以某种方式实现这一点吗?我找不到任何类似的示例,似乎也没有任何方法可以做到这一点。

您可以使用

IObservable<T> source = ...;
IObservable<List<T>> history = source
    .Scan(new List<T>(), (list, item) => { list.Add(item); return list; });

这实际上是如何工作的?元素是否每次都会重新计算,还是以某种方式存储并仅复制(这将是理想的)@julealgon
Scan
的第一个参数是累积种子。称之为
列表
。每次
发出
,lambda
(list,item)=>{list.Add(item);return list;})
被调用,然后
列表
历史
发出。每次都会发出相同的
列表
,但每次其长度都会增加
1
。元素不是每次都重新计算。这太神奇了!我不敢相信这真的有效,只是在这里测试了一下。。。我昨天开始使用Rx,我已经看到它有多强大了。@julealgon如果你喜欢它,一定要通读这篇精彩的介绍:
IObservable<List<T>> history = source
    .Scan(new List<T>(), (list, item) => list.Concat(new[]{ item }).ToList());