我是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>

最佳答案

这几乎是获得可观察值以产生值的最简单方法:

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打印到控制台。

关于c# - 如何更改IObservable <double>的值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47450764/

10-12 03:44