C# 如何使用Rx检索序列生成器的生命周期操作?
我需要一种方法来检索序列之前生成的所有对象,以及新的对象,当我收到关于它的更改的通知时,使用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<
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());