gpt4 book ai didi

c# - 使用 .NET Rx 观察随 Action 事件改变的属性

转载 作者:太空狗 更新时间:2023-10-29 18:25:41 25 4
gpt4 key购买 nike

假设我正在使用以下接口(interface)(假设我们不能更改我们的实现以使其成为 IObservable<T> 以及 IProperty<T>)。

public interface IProperty<T> {
T Value { get; set; }
event Action ValueChanged;
}

我正在尝试观察 T 的集合s 随着值的变化而生成。因为事件声明为 Action而不是标准的 .NET 事件模式,我认为我不能使用 Observable.FromEvent(...) .

我想出了一个似乎可行的包装器,但作为一个 Rx 新手,我确信我缺少一些内置的抽象(或者可能只是做错了整个事情)。

有没有办法使用内置的 Rx 功能来做到这一点?如果不是,我的包装器是否缺少任何明显的抽象,或者我是否应该采用完全不同的方法?

//Example wrapper
public class ObservableProperty<T> : IObservable<T> {
private readonly IProperty<T> _property;
public ObservableProperty(IProperty<T> property) { _property = property; }

public IDisposable Subscribe(IObserver<T> observer) {
Action action = () => observer.OnNext(_property.Value);
_property.ValueChanged += action;
return Disposable.Create(() => _property.ValueChanged -= action);
}
}

最佳答案

应该这样做:

public static class RxExt
{
public static IObservable<T> FromMyEvent<T>(this IProperty<T> src)
{
return System.Reactive.Linq.Observable.Create<T>((obs) =>
{
Action eh = () => obs.OnNext(src.Value);
src.ValueChanged += eh;
return () => src.ValueChanged -= eh;
});
}
}

关于c# - 使用 .NET Rx 观察随 Action 事件改变的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6056004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com