如何将 IObservable<IObservable<T>> 转换为 IObservable<IEnumerable<T>>?
How do I turn an IObservable<IObservable<T>> into an IObservable<IEnumerable<T>>?
我有鼠标左键状态的流:
var leftMouseButton = mouse.Select(x => x.LeftButton).DistinctUntilChanged();
然后我 Window
这给我一个 observable of observables 表示鼠标拖动:
var leftMouseDrag = mouse
.Select(mouseState => new Point(mouseState.X, mouseState.Y))
.DistinctUntilChanged()
.Window(leftMouseButton.Where(x => x == ButtonState.Pressed), x => leftMouseButton.Where(y => y != x));
现在我想从 leftMouseDrag
中创建一个流,它给出了点列表。每次用户完成拖动(LMB 向下 -> 移动 -> LMB 向上)时,它应该触发鼠标移动经过的位置列表。
如何将 IObservable<IObservable<Point>>
转换为 IObservable<IEnumerable<Point>>
?
将您的 Window
运算符更改为 Buffer
运算符(this overload).
运算符产生 IObservable<IList<T>>
,其中 IList
属于 IEnumerable
基于 OP 评论的替代解决方案:
var leftMouseDragLists = leftMouseDrag.SelectMany(i => i.ToList());
我有鼠标左键状态的流:
var leftMouseButton = mouse.Select(x => x.LeftButton).DistinctUntilChanged();
然后我 Window
这给我一个 observable of observables 表示鼠标拖动:
var leftMouseDrag = mouse
.Select(mouseState => new Point(mouseState.X, mouseState.Y))
.DistinctUntilChanged()
.Window(leftMouseButton.Where(x => x == ButtonState.Pressed), x => leftMouseButton.Where(y => y != x));
现在我想从 leftMouseDrag
中创建一个流,它给出了点列表。每次用户完成拖动(LMB 向下 -> 移动 -> LMB 向上)时,它应该触发鼠标移动经过的位置列表。
如何将 IObservable<IObservable<Point>>
转换为 IObservable<IEnumerable<Point>>
?
将您的 Window
运算符更改为 Buffer
运算符(this overload).
运算符产生 IObservable<IList<T>>
,其中 IList
属于 IEnumerable
基于 OP 评论的替代解决方案:
var leftMouseDragLists = leftMouseDrag.SelectMany(i => i.ToList());