我是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>
答案 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
打印到控制台。