0

我有類ObserverBase。在Start方法中,我訂閱一個observable,應用一個轉換和一個過濾器。爲什麼SubscribeOn在這裏不能用作擴展方法,而是直接調用?

我不明白爲什麼使用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; 
    } 
} 
+0

*「...作爲擴展方法不編譯」* - 您需要提供編譯錯誤。 – jww 2014-09-11 11:30:18

回答

3

這對我的作品 - 你包括對System.Reactive.Linq命名空間(其中SubscribeOn定義)一個using聲明? Synchronization.ObserveOn是在不同的名稱空間(System.Reactive.Concurrency) - 我懷疑你已經有一個使用語句。

0

Visual Studio編譯代碼,但ReSharper報告了這些錯誤。重新啓動Visual Studio ReSharper後停止抱怨。

+0

啊! Resharper ......這是一種愛與恨的關係! – 2014-09-11 07:46:44

+1

你無法生活或沒有它 – mrt181 2014-09-11 07:53:14

相關問題