c# - 为什么SubscribeOn在这里不能作为扩展方法而是直接调用?

标签 c# compiler-errors resharper extension-methods system.reactive

我有ObserverBase类。在Start方法中,我订阅了一个可观察对象,应用了转换和过滤器。

我不明白为什么未编译SubscribeOn作为扩展方法的用法。
谁能解释这种行为?

public class ObserverBase<T1, T2> : IPeer<T1, T2>
{

    private readonly ISubject<T2> subject;

    private readonly IMapper<T1, T2> messageMapper;

    protected ObserverBase(ISubject<T2> subject, IMapper<T1, T2> messageMapper)
    {
        this.subject = subject;
        this.messageMapper = messageMapper;
    }

    public IObservable<T2> Start(IObservable<T1> observable, Func<T2, bool> predicate)
    {
        //works
        Synchronization.ObserveOn(Synchronization.SubscribeOn(observable, TaskPoolScheduler.Default),
                                  Scheduler.Immediate)
                  .Select(message => this.messageMapper.Map(message))
                  .Where(predicate)
                  .Subscribe(observation => this.subject.OnNext(observation));


        // compile error on SubscribeOn: The type arguments cannot be inferred from the usage. Try specifying the type argument explicitly.
        observable.SubscribeOn(TaskPoolScheduler.Default).ObserveOn(Scheduler.Immediate)
                  .Select(message => this.messageMapper.Map(message))
                  .Where(predicate)
                  .Subscribe(observation => this.subject.OnNext(observation));

        // compile error on TaskPoolScheduler.Default: Cannot resolve method SubscribeOn(System.Reactive.Concurrency.TaskPoolScheduler)
        observable.SubscribeOn<T1>(TaskPoolScheduler.Default).ObserveOn(Scheduler.Immediate)
                  .Select(message => this.messageMapper.Map(message))
                  .Where(predicate)
                  .Subscribe(observation => this.subject.OnNext(observation));

        return this.subject;
    }
}

最佳答案

这对我有用-您是否为using命名空间(定义了System.Reactive.Linq)包括了SubscribeOn语句? Synchronization.ObserveOn在另一个 namespace (System.Reactive.Concurrency)中-我怀疑您已经有了using语句。

关于c# - 为什么SubscribeOn在这里不能作为扩展方法而是直接调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25781457/

相关文章:

c# - 获取用户控件以填充其容器

c# - 只读属性的最佳方法是什么

c++ - 为什么定义成员函数指针变量需要类名?

resharper - 从垃圾邮件输出窗口停止 Resharper

asp.net - 从源代码、aspx、xaml 中提取可本地化的字符串到资源文件

c# - NInject 不解决特定的依赖关系

java - 为什么 Java 跳过 For 语句?

Java 7u7 setLookAndFeel 不起作用?

c# - 最小起订量:不可覆盖成员的无效设置:x => x.GetByTitle ("asdf")

c# - Fluent Nhibernate 在新的父级和子级上保存 child.parentid =parentId