如何动态更新/添加IObservable <int>中的项目?</int>

时间:2012-02-16 15:31:03

标签: c# c#-4.0 system.reactive reactive-extensions-js

我有一个可观察的集合,我想继续喂养对象,即使有人订阅了它,它们也应该到达观察者(哪个是可观察的主要目标)。我该怎么做?

在以下程序中,订阅发生后我想要输入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);
    }
}

1 个答案:

答案 0 :(得分: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);

通常情况下,如果您可以观察产生额外输入的内容,那么您需要将 observable连接起来,而不是强制性地将这些值推送到主题中,但有时这是不切实际的。