Я использую расширения RX и WF4 для создания рабочего процесса, который реагирует на наблюдаемые сообщения для продвижения рабочего процесса. Для этого я ввожу объект, содержащий IObservable (ModuleMessage, являющийся моим абстрактным классом. )Проблема, с которой я столкнулся, заключается в том, что.Subscribe не может распознать ни один из своих методов расширения, а именно метод для лямбда-выражений/групп методов. В следующем коде у меня есть ссылки:
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, но использовал подписку таким образом в другом месте в том же решении. Я добавил RX в этот проект через NuGet.
Отредактируйте :следующую ошибку, если я использую в качестве группы методов (вместо лямбда):
Error 2 Argument 1: cannot convert from 'method group' to 'System.IObserver<Components.Messages.ModuleMessage>' <removed>\WaitForModuleVisitExtension.cs 34 119 Components