2016-09-16 47 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));