1

随着时间的推移,我正在尝试改进我的观察者中的过滤器,我想知道他们最好的方法是什么。

例如myObservable.Where(x=>x.Color=="red").Subscribe();

接着myObservable.Where(x=>x.Color=="blue").Subscribe();

然后将两者合并为一个流,以便OnNext()在 Red OR Blue observables 上调用。

也许它还没有完全了解我正在发生的事情。

如果我也有myObservable.Where(x=>x.Type=="Car").Subscribe();. 每次都会继续调用相同的 OnNext() 方法吗?这对我有什么用.. 我可能想根据哪个订阅调用更新做出不同的反应,但同时我可能想扁平化订阅。

例如在上面的场景中,如果颜色是红色我想写'new red object',如果它是一辆车我想写'new car'。我将如何在 Rx 中执行此操作?OnNext、OnError 等的订阅有过载。但这要求观察者也是可观察的(主题)。如果我错了,请纠正我。

这对我来说毫无意义..为什么观察变化的东西也应该是可观察的?

4

2 回答 2

1

这个怎么样?

myObservable.Where(x=>x.Color=="red" || x.Color == "blue").Subscribe(x=>Console.WriteLine("new {0} object", x.Color));
myObservable.Where(x=>x.Type=="Car").Subscribe(x=>Console.WriteLine("new car"));

杰弗里

于 2010-07-13T17:07:09.337 回答
0

首先,Subject 是一个 observable,它响应于观察到其他 observable 而生成。在某些情况下,它们作为“管道”很有用,您甚至可以使用它们来构建一种通过渠道进行通信的“代理”形式。

对于您的主要问题:我认为它可能没有点击,因为在您的订阅示例中,您遗漏了应该订阅的观察者 - 它不能是 ...Subscribe(),它必须是 ...Subscribe(观察者)。

您的问题的一个答案是,您可以只为同一个观察者订阅多个可观察对象。或者你可以使用合并。如果您希望能够区分它们,那么最简单的方法是让两个 Subject 观察,做特定于那种事情的事情,然后继续传递观察结果进行合并。或者,您可以在合并观察之前使用 Select 标记观察。

于 2010-07-29T10:39:05.993 回答