2016-09-16 81 views

回答

-1

你不会(不管你是否想要一个连接或笛卡尔产品)。 IObservable<T>接口用于订阅通知,仅此而已。

但是,如果您确定IObservable<T> s也是IEnumerable<T> s,那么只需将它们投射到IEnumerable<T>。不用说,这可能不是最好的设计。

+0

这就像说'IEnumerable'只是让你获得序列的下一个元素,没有什么比这更简单了。从技术上讲,这是真的,但是在给定任何能够做这件事情的东西时,你可以执行各种各样的操作,例如将这些项目中的每一个转换为另一个项目,或将这些项目与另一个序列中的项目连接起来。相同的逻辑适用于'IObservable'。 – Servy

+0

那么最好的方法是在两个IObservable流中找到相同的元素并将它们推送到另一个IObservable? –

+1

@MT显然,你应该编辑你的问题,并提供更多关于你真正想要达到的细节。 –

1

你真的需要使问题更清楚。 IObservable可以发出随时间间隔分开的项目。如果你加入Observable-A和Observable-B,并且一个小时后发射物品1,那么是否满足条件?

下面的代码演示了两个观测内部联接假设你不在乎在所有关于项目发出什么时候,哪一个最先发出,或它们之间的相对时间:

var factorsOfTwo = Observable.Interval(TimeSpan.FromSeconds(1)) 
    .Select(i => i * 3) 
    .Take(10); 

var factorsOfThree = Observable.Interval(TimeSpan.FromSeconds(1)) 
    .Select(i => i * 2) 
    .Take(10); 

var factorsOfBothTwoAndThree = factorsOfTwo.Join(factorsOfThree, 
     i => Observable.Never<object>(), 
     i => Observable.Never<object>(), 
     (a, b) => Tuple.Create(a, b) 
    ) 
    .Where(t => t.Item1 == t.Item2) 
    .Select(t => t.Item1); 

factorsOfBothTwoAndThree.Subscribe(l => Console.WriteLine(l));