2012-02-16 31 views
6

我有一個可觀察的集合,我想繼續餵養對象,並且即使在某人訂閱了它(哪一個課程是可觀察的主要目標)之後,它們也應該到達觀察者。我該怎麼做?如何動態更新/添加IObservable <int>中的項目?

在下面的程序中,在訂閱發生之後,我想再輸入3個數字,這些數字應該到達觀察者。我該怎麼做呢?

我不想通過執行IObservable<int>並使用Publish方法來實現我自己的Observable類的路由嗎?有沒有其他方法可以實現這一點?

public class Program 
{ 
    static void Main(string[] args) 
    { 
     var collection = new List<double> { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 
     var observableCollection = collection.ToObservable(); 
     observableCollection.Subscribe(OnNext); 
     //now I want to add 100, 101, 102 which should reach my observers 
     //I know this wont' work 
     collection.Add(100); 
     collection.Add(101); 
     collection.Add(102); 
     Console.ReadLine(); 
    } 

    private static void OnNext(double i) 
    { 
     Console.WriteLine("OnNext - {0}", i); 
    } 
} 
+0

如果您刪除項目,您希望IObservable 做什麼? – 2012-03-02 02:31:24

回答

5

這是我會怎麼做:

var subject = new Subject<double>(); 
    var collection = new List<double> { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 
    var observableCollection = collection 
     .ToObservable() 
     .Concat(subject); //at the end of the original collection, add the subject 
    observableCollection.Subscribe(OnNext); 

    //now I want to add 100, 101, 102 which should reach my observers 
    subject.OnNext(100); 
    subject.OnNext(101); 
    subject.OnNext(102); 

一般來說,如果你可以觀察到無論是生產額外的輸入,你會希望Concat的觀察到的,而不是推勢在必行這些價值成爲一個主題,但有時這是不實際的。

+0

尚不清楚訂閱(OnNext)和subject.OnNext(100)是不是真的是相同的參考。前者是任何方法調用作爲項目進來。後者是Rx方法通知訂閱的觀察員一個新的可觀察事件已經到達序列中。 – BraveNewMath 2016-01-08 06:08:12

相關問題