2010-11-02 44 views
1

我在LinqPad 4中嘗試了下面的測試,並得到了「Observable not in context」錯誤。 IEnumerable分支有效,奇怪的是,我沒有爲IObservable本身獲取錯誤,只是爲了靜態方法Observable.Range。LinqPad 4中缺少Observable參考?

static void Main() 
{ 
IEnumerableSieve(); 
IObservableSieve(); 
} 

private static void IEnumerableSieve() 
{ 
IEnumerable<int> oddsFrom3 = IntsFrom(3, 2); 
List<int> cache = new List<int>() { 2 }; 

IEnumerable<int> primes = oddsFrom3. 
    Where(candidate => cache.TakeWhile(prime => prime * prime <= candidate). 
    Where(trialDivisor => candidate % trialDivisor == 0).Count() == 0); 

Console.WriteLine("IEnumerable oddsFrom3:"); 
foreach (int p in primes.Take(20)) 
{ 
    Console.WriteLine("{0}", p); 
    cache.Add(p); 
} 
} 

private static void IObservableSieve() 
{ 
const int bigMax = 1 << 30; 

// Generate the candidates as observables, cache the primes in an IEnum list as before. 
// But it's TERRIBLE that the cache is now of a different TYPE than the thing it's caching. 
// The cache is IEnumerable, and the thing it's caching is an IObservable. 

IObservable<int> oddsFrom3 = Observable.Range(3, bigMax).Where(i => i % 2 == 1); 
List<int> cache = new List<int>() { 2 }; 

IObservable<int> primes = oddsFrom3. 
    Where(candidate => cache. 
    TakeWhile(prime => prime * prime <= candidate). 
    Where(trialDivisor => candidate % trialDivisor == 0).Count() == 0); 

Console.WriteLine("IObservable oddsFrom3 "); 

primes.Take(20).Subscribe(p => { Console.WriteLine("{0}", p); cache.Add(p); }); 
} 

static IEnumerable<int> IntsFrom(int i, int increment) 
{ 
while (true) 
{ 
    yield return i; 
    i += increment; 
} 
} 

任何提示?

回答

1

我找到了。 LinqPad中的F4提供了一個Add-reference對話框,並且從那裏一切正常。