我有一个鼠标左键状态流:
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());
关于c# - 如何将 IObservable<IObservable<T>> 转换为 IObservable<IEnumerable<T>>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38181696/