我正在使用RX扩展和WF4来创建工作流,该工作流对可观察的消息做出反应以推进工作流程。为此,我引入了一个包含IObservable的对象(ModuleMessage是我的抽象类。)我遇到的问题是.Subscribe无法识别任何扩展方法,即lambda extpressions /方法组。在以下代码中,我有参考:
using System.Activities;
using System.Activities.Hosting;
using System.Collections.Generic;
using System.Reactive.Linq;
以及以下代码行:
internal void AddModuleCallback(IModule module)
{
if (!addedCallback)
{
addedCallback = true;
module.Messages.Where(m => m is MemberLeftModuleMessage || m is MemberRemovedModuleMessage).Subscribe(m => this.OnMemberExit(m)); // This line errors
}
}
internal void OnMemberExit(ModuleMessage message)
{
// Gizmo was fired, resume the bookmark
this.instance.BeginResumeBookmark(
new Bookmark(ModuleVisit.BookmarkName),
message is MemberLeftModuleMessage,
r => this.instance.EndResumeBookmark(r),
null);
}
编译时错误:
Error 1 Cannot convert lambda expression to type 'System.IObserver<Components.Messages.ModuleMessage>' because it is not a delegate type <Removed>\WaitForModuleVisitExtension.cs 34 119 Components
请注意,此代码是根据样本改编而来的,并没有按照我的喜好进行考虑,我纯粹关注手头的问题。我不是RX或WF4的专业人士,但在同一解决方案中以其他方式使用订阅。我已经通过NuGet为这个项目添加了RX。
编辑:如果我用作方法组(而不是lambda),则出现以下错误:
Error 2 Argument 1: cannot convert from 'method group' to 'System.IObserver<Components.Messages.ModuleMessage>' <removed>\WaitForModuleVisitExtension.cs 34 119 Components
答案 0 :(得分:30)
你错过了这个:
using System;
这是包含ObservableExtensions
静态类的命名空间,包含所有Subscribe
扩展方法。
通过using
指令(以及试图使用它们的代码的命名空间层次结构)“发现”扩展方法。