如何更改IObservable <double>的值?

时间:2017-11-23 08:28:19

标签: c# system.reactive

我是RX的新手,现在我正在尝试做一件容易的事情 - 只是为IObservable设置一个新值(在我的情况下T是双倍的)。怎么做?

   public IObservable<double> TEST
    {
        get { return _test.NeededValue; }
        set { _test.NeededValue = value; } // I have add this, in order to change needed value
    }
    ...
    myObj.TEST = 0.1; // error 'Cannot convert double to System.IObservable<double>

1 个答案:

答案 0 :(得分:2)

这是获得observable生成值的最简单方法:

Subject<double> subject = new Subject<double>();
IObservable<double> observable = subject.AsObservable();
observable.Subscribe(x => Console.WriteLine(x));
subject.OnNext(42);

这会将42输出到控制台。

我已将IObservable<double> observable = subject.AsObservable();行包含在内,以显示您应该执行的操作,但由于Subject<T>也是IObservable<T>,您实际上可以执行此操作:

Subject<double> subject = new Subject<double>();
subject.Subscribe(x => Console.WriteLine(x));
subject.OnNext(42);

现在,这并不是太有趣了。

这可能会更符合您的需求:

void Main()
{
    var foo = new Foo();
    foo.Bars.Subscribe(x => Console.WriteLine(x));
    foo.OnBar(42);
}

public class Foo
{
    public event EventHandler<double> Bar;

    public void OnBar(double value)
    {
        this.Bar?.Invoke(this, value);
    }

    public IObservable<double> Bars
    {
        get
        {
            return
                Observable
                    .FromEventPattern<EventHandler<double>, double>(
                        h => this.Bar += h,
                        h => this.Bar -=h)
                    .Select(x => x.EventArgs);
        }
    }   
}

此代码还会将42打印到控制台。