Как динамически обновлять / добавлять элементы в IObservable <int>? - PullRequest
6 голосов
/ 16 февраля 2012

У меня есть наблюдаемая коллекция, в которую я хочу продолжать кормить объекты, и они должны достигать наблюдателей даже после того, как кто-то подписался на них (какой курс является главной целью наблюдаемой).Как мне это сделать?

В следующей программе после подписки я хочу ввести еще 3 числа, которые должны достичь наблюдателей.Как мне это сделать?

Я не хочу идти по маршруту, где я реализую свой собственный класс Observable, реализуя IObservable<int> и используя метод 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);
    }
}

1 Ответ

5 голосов
/ 16 февраля 2012

Это то, что я бы сделал:

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

Как правило, если вы можете наблюдать за тем, что производит дополнительный ввод, вы хотите констатировать , что можно наблюдать, а ненастоятельно подталкивать эти ценности к предмету, но иногда это не практично.

...