ele*_*eep 5 .net c# system.reactive
我一直在调查Rx库,并试图复制以下视频中的示例...
http://channel9.msdn.com/blogs/j.van.gogh/writing-your-first-rx-application
这一切都有效(对已经改变/弃用的东西进行了一些修改)直到他使用...
.Let(mm => ...)
Run Code Online (Sandbox Code Playgroud)
这会抛出一个编译器错误,说没有let的定义,所以我假设Let已被改为其他东西,或完全删除,但我无法通过Google搜索找到任何解决方案.
那么有谁知道在这个例子中使用什么?
按照Jim Wooley的建议.
我认为您正在寻找的代码是
var q = from start in mouseDown
from delta in mouseMove.StartWith(start).Until(mouseUp)
.Let(mm=> mm.Zip(mm.Skip(1), (prev, curr) =>
new { X = curr.X - prev.X, Y = curr.Y - prev.Y}))
select delta;
Run Code Online (Sandbox Code Playgroud)
请记住,这是在2009年写的,从那时起,Rx就开始了.我想这就是你想要的.我认为Let是你想要避免的功能(即使你可以使用),因为它可以鼓励副作用.改为使用Select进行转换.在下面的情况下,不需要let.
//Gets the delta of positions.
var mouseMovements = mouseMove.Zip(mouseMove.Skip(1), (prev, curr) =>
new { X = curr.X - prev.X, Y = curr.Y - prev.Y}));
//Only streams when mouse is down
var dragging = from md in mouseDown
from mm in mouseMovement.TakeUntil(mouseUp)
select mm;
Run Code Online (Sandbox Code Playgroud)
让仍然存在,这对你不起作用吗?
var observable = new Subject<int>();
observable.Let(mm => mm);
Run Code Online (Sandbox Code Playgroud)
也许您忘记了命名空间导入?(系统.反应式.Linq)?