6

オブジェクトをフィードし続けたいオブザーバブルコレクションがあり、誰かがサブスクライブした後でもオブザーバーに到達する必要があります(もちろん、これがオブザーバブルの主な目的です)。どうすればいいのですか?

次のプログラムでは、サブスクリプションが発生した後、オブザーバーに到達する必要があるさらに 3 つの数値をフィードしたいと考えています。どうすればいいですか?

IObservable<int>メソッドを実装して使用することにより、独自の Observable クラスを実装するルートを経由したくありませんPublishか? これを達成する他の方法はありますか?

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);
    }
}
4

1 に答える 1

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);

一般に、追加の入力を生成しているものを観察できる場合は、これらの値を命令的にサブジェクトにプッシュするのではなく、そのオブザーバブルを連結することをお勧めしますが、実際的でない場合もあります。

于 2012-02-16T19:02:37.490 に答える