2010-11-02 1 views
1

Я пробовал следующий тест в LinqPad 4 и получил ошибку «Observable not in context». Развертка IEnumerable работает, и, как ни странно, я не получаю ошибку для самого IObservable, только для статического метода Observable.Range.Отсутствует Замечательная ссылка в LinqPad 4?

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

Я нашел его. F4 в LinqPad открывает диалоговое окно Add-reference, и все работает отлично.

Смежные вопросы